JS中的call/apply/bind

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了JS中的call/apply/bind相关的知识,希望对你有一定的参考价值。

<script>
        var obj = {
            a:1
        }    
        var a = 2;
        
        function test(a)
        {
            alert(a);
            alert(this.a);
        }
        </script>

 

1.test(3);

  结果:"3"、"2";

  解释:实参3传递给形参a,函数内部的形参a覆盖全局变量a,所以第一个为3,函数中this为window对象,所以this.a为2

2.test.call(thisObject,param1,param2...);

    thisObject:更改test函数中this的指向;

    param:为test函数传递参数,以字符串的形式

  test.call(null);

    结果:"undefined","2";

    解释:test(a)执行时,并没有参数传递过来,a为undefined,由于传递thisObject是null,在执行test函数时,浏览器把thisObejct没有指向时,一律指向window对象,所以第二个弹出为2。同样的test.call(undefined);的结果同上;

3.test.call(null,3);

  结果:"3","2";

4.test.call(obj);

  结果:"undefined","1";

5.test.call(obj,3);

  结果:"3","1";

6.test.apply(thisObject,[param1,param2....]);

  除了给函数传递参数的形式是以数组,其他的和call(thisObject,param1,param2...);

7.test.bind(thisObject,param1,param2...)

  thisObject:更改this指向

  param:参数

这个方法返回this更改指向,且获得实参的函数对象

var ss = test.bind(null);

ss();

结果:"undefined","2"

var ss = test.bind(obj);

ss();

结果:"undefined","1";

var ss = test.bind(obj,3);

ss();

结果:"3","2";

当函数有多个参数时:

function test(a,b,c)
{
    alert(a+":"+b+":"+c);
}
        
var ss = test.bind(obj,3);
ss(4,5,6);

结果为:3,4,5却不是4,5,6;因为在bind的时候,就将3赋值给了a,在ss(4,5,6)时,6并未赋值给c;

arguments中保存的值为3,4,5,6;

以上是关于JS中的call/apply/bind的主要内容,如果未能解决你的问题,请参考以下文章

前端js中的this

在C++中怎么调用一个js中的方法

如何将 npm 包中的 JS 文件包含到 Nuxt.js 中的单独页面

node.js 项目中的 index.js 用于啥?

shopify中的.js和.js.liquid有啥区别?

如何在js文件中调用另一个js中的方法(详细请进)