您的位置:首页 > 移动开发

js中改变this指向的三个常用方法bind,call和apply

2018-01-18 16:34 986 查看
一.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所指对象为windowsayName.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])

新开的博客,欢迎各位抢占沙发,积极评论,哈哈
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: