js的apply和call
call和apply都是用来修改函数中this的指向问题例如:
B.call(A, args1,args2,...);即A对象调用B对象的方法
function Person(name, age, sex, weight) {
this.name = name;
this.age = age;
this.sex = sex;
this.weight = weight;
}
Person.prototype.sayHi = function () {
console.log("您好");
};
function Student(name,age,sex,weight,score) {
//借用构造函数
// >> 会引用Person中的内容
// >> 一般来说,this总是指向调用某个方法的对象,但是使用call()和apply()方法时,就会改变this的指向
// >> 此时Persion中的this指的是Student构造函数,所以Student中包含了Person中的属性,实现了继承
Person.call(this,name,age,sex,weight);
this.score = score;
}
var stu1 = new Student("小明",10,"男","10kg","100");
console.log(stu1.name, stu1.age, stu1.sex, stu1.weight, stu1.score);
不同之处:
apply:最多只能有两个参数——新this对象和一个数组argArray。
call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表
实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。
function Person(age,sex) {
this.age=age;
this.sex=sex;
}
//通过原型添加方法
Person.prototype.sayHi=function (x,y) {
console.log("您好啊:"+this.sex);
return 1000;
};
var per=new Person(10,"男");
per.sayHi();
console.log("==============");
function Student(name,sex) {
this.name=name;
this.sex=sex;
}
var stu=new Student("小明","人妖");
// apply传参形式
var r1=per.sayHi.apply(stu,[10,20]);
// call传参形式
var r2=per.sayHi.call(stu,10,20);
console.log(r1);
console.log(r2);
保存redis相关笔记

浙公网安备 33010602011771号