- call(),apply(),bind()三种方法
- call()和apply()方法都可以改变this的指向。
- call()用法:
函数名字.call(对象,参数1,参数2,...); 方法名字.call(对象,参数1,参数2,...);
- apply()用法:
函数名字.apply(对象,[参数1,参数2,...]); 方法名字.apply(对象,[参数1,参数2,...]);
- 代码:
function Person(age,name) { this.age=age; this.name=name; } Person.prototype.sayHi=function (x,y) { console.log("哈哈"+(x+y)+"===========>"+this.sex); }; function Student(sex,age,name) { this.sex=sex; Person.apply(this,[age,name]); } var per=new Person(10,"小明"); var stu=new Student("男",100,"小王"); per.sayHi.apply(stu,[10,20]);//哈哈30===========>男 per.sayHi.call(stu,10,20);//哈哈30===========>男 console.log("==========="); console.log(stu);
- bind()方法:
复制了一份的时候,把参数传入到了f1函数中,x===>10,y===>20,null就是this,默认就是window bind方法是复制的意思,参数可以在复制的时候传进去,也可以在复制之后调用的时候传入进去 apply和call是调用的时候改变this指向 bind方法,是复制一份的时候,改变了this的指向 函数名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个函数 方法名字.bind(对象,参数1,参数2,...);---->返回值是复制之后的这个方法
代码: