apply和call
作用:改变this的指向 不同的地方:参数传递的方式是不一样的
只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call的方法改变this的指向
apply的使用语法
* 函数名字.apply(对象,[参数1,参数2,...]);
* 方法名字.apply(对象,[参数1,参数2,...]);
* call的使用语法
* 函数名字.call(对象,参数1,参数2,...);
* 方法名字.call(对象,参数1,参数2,...);
function Person(age,name) {
this.age=age;
this.name=name;
}
//通过原型添加方法
Person.prototype.sayHi=function (x,y) {
console.log("你好啊:"+this.name);
};
function Student(sex,name) {
this.name=name;
this.sex=sex;
}
var stu=new Student("人妖","学生");
var per=new Person(18,"梦婉");
per.sayHi.apply(stu,[10,20]);//您好啊:学生
per.sayHi.call(stu,10,20);//您好啊:学生
per.sayHi.apply(null,[10,20]);//你好啊:
per.sayHi.call(null,10,20);//你好啊:
per.sayHi();//你好啊:梦婉
apply和call方法中如果没有传入参数,或者是传入的是null,那么调用该方法的函数对象中的this就是默认的window
bind方法
bind是用来复制一份的时候改变指向(apply和call是调用的时候改变指向)
函数名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个函数
方法名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个方法
function Person(age) {
this.age=age;
}
Person.prototype.play=function () {
console.log(this+"====>"+this.age);
};
function Student(age) {
this.age=age;
}
var per=new Person(10);
var stu=new Student(20);
//复制了一份
var ff=per.play.bind(stu);
ff();