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

一.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])


新开的博客,欢迎各位抢占沙发,积极评论,哈哈







  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值