修改this指向

101 阅读1分钟

call,apply,bind三种方法:

call方法使用的语法规则:
函数名称.call(obj,arg1,arg2...argN);
参数说明:
obj:函数内this要指向的对象
arg1,arg2...argN :参数列表,参数与参数之间使用一个逗号隔开

例子:

<script>
    var lisi = {names:'lisi'};
    var zs = {names:'zhangsan'};
    function f(age){
        console.log(this.names);
        console.log(age);
    }
    f(23);  //undefined this指向window默认值为undefined
    f.call(zs,32);   //zhangsan将f函数中的this固定在zs对象中
</script>

apply方法使用的语法规则:
参数说明:
obj:函数内this要指向的对象
[arg1,arg2...argN] : 参数列表,但是要求格式为数组

例子:

<script>
    var lisi = {name:'lisi'};
    var zs = {name:'zhangsan'};
    function f(age,sex){
        console.log(this.name+age+sex);
    }
    f.apply(zs,[23,'nan']);
</script>

bind方法使用的语法规则:
bind方法用于将创建一个新的函数,且将新函数中的this绑定到具体的某个对象
<script>
    function foo() {
        console.log(this.a);
    }
    var obj2 = {
        a: 2,
    };
    // 创建新函数,并将新函数中的this固定的指向obj2对象;
    var new_foo = foo.bind(obj2);
    new_foo();     //2
    foo();    //undefined
</script>

相同点:
call,apply,bind 第一个参数都是 this 指向的对象:
不同点::
1、call 和 apply 如果第一个参数指向 null 或 undefined 时,那么 this 会指向 windows 对象。:
2、call,apply 都是改变上下文中的 this,并且是立即执行的。bind 方法可以让对应的函数想什么时候调用就什么时候调用。

来源链接:zhuanlan.zhihu.com/p/71944670