一.bind:
说起bind,很多人都会想起jquery中的bind绑定方法,给元素绑定事件,今天所讲的bind则是js的原生方法---可改变this的指向,下面我们来看演示:
var name = 'sally';
function sayName(){
return this.name;
}
function sayName2(){
return this.name
}
var o = {
'name':'John',
sayName:sayName,
sayName2:sayName2.bind(window)
};
console.log(o.sayName()); //John
console.log(o.sayName2());//sally
结果看来很明显,两个方法都是o对象来调用的,在不使用bind改变this指向空间时,两个均为John,但由于bind的特殊作用,将其指向绑定为window的,因为最后一个输出了全局变量的name;
二.call和apply:
相同点:call和apply均可以改变this指向,
不同点:call接受的参数为一个一个的,但是apply接受的参数只能为一个严格的数组(详情见如下的代码演示)
var name = 'sally';
function sayName(){
return this.name;
}
var o = {
'name':'John',
sayName:sayName
};
sayName();
结果为:sally 因为此时this所指对象为window
sayName.call(o);
//sayName.apply(o);
以上不管哪一个,均可以将其this指向指向为o,那又有什么不同点呢?
var name = 'sally';
function sayName(){
console.log (this.name,arguments)
}
sayName.call(o,1,2,3);
但若换成apply的话,会报错,因为apply接受的参数应该是一个严格意义的数组。
若改成下面的就可以了,
sayName.apply(o,[1,2,3])
新开的博客,欢迎各位抢占沙发,积极评论,哈哈