浅谈js中的call,apply,bind方法中的this指针

我们知道在js中的this指针一点还是比Java中的this指针复杂点

官方给出的两个函数定义call(thisObj,arg1,arg2...)、apply(thisObj,[obj1,obj2...])

其中的thisObject就是指的this指针,这个thisObject是当前执行环境的上下文,也就是当前执行环境所指的对象,这个对象可以是js中的任意一个对象,默认的是window对象。

call函数:传入的参数必须一个一个的给列举出来,不能传入数组

apply函数:传入的参数必须传入的是数组的形式

function func() {
    var sum = function (para1, para2) {
        return para1 * para2;
    }
    function callSum(para1, para2) {
        return sum.call(this,para1, para2);
    }
    console.log(callSum(10, 20));
}
function sum(para1, para2) {
    return para1 + para2;
}

function callSum( para1, para2) {
    return sum.call(this, para1, para2);
}
function applySum(para1, para2) {
    return sum.apply(this, [para1, para2]);//也可以这样写return sum.apply(this,arguments)
}
console.log(callSum( 100, 20));//输出120
console.log(applySum(10, 20));//输出30
func();//输出200

可以看出在func中这个this指向的是当前的func这个执行环境,所以会调用func中的sum函数,而不是window下面的sum函数

bind函数的使用是:bind方法会创建一个函数的实例,其this值会被绑定到传给bind()函数的值。

var color='red';
function sayColor(){
    console.log(this.color);
}
var obj={
    color:'blue'
}
var bindSayColor1=sayColor.bind(obj);
bindSayColor1();//blue
var bindSayColor2=sayColor.bind();
bindSayColor2();//red

由以上可以看出,bind函数的this值默认的是当前执行环境

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值