call,bind,apply 的使用和理解

2020-06-17  本文已影响0人  达文西_Huong

看完你就懂的 call,bind,apply的区别和使用 【转载】

原文:https://www.runoob.com/w3cnote/js-call-apply-bind.html


先上图


image
    obj.objAge;   // 17
    obj.myFun()   // 小张年龄 undefined
image
    shows()  // 盲僧

比较这两者的this的差别。第一个打印的this 指向 obj, 第二个全局声明的 shows() 函数 this 是window;

1. call(),apply(),bind() 都是用来重定义 this 这个对象的

如:


image
    obj.myFun.call(db);      // 玛德年龄 99
    obj.myFun.apply(db);     // 玛德年龄 99
    obj.myFun.bind(db)();      // 玛德年龄 99 

得出结论,除了bind需要主动调用以外,其他的结果返回都是一致的。
这样可以知道。bind返回的是一个新的函数,需要手动去调用它。

2. 对比call,bind,apply 传参情况下

image
    obj.myFun.call(db,'成都','上海');     // 玛德 年龄 99 来自成都去往上海
    obj.myFun.apply(db,['成都','上海']);  // 玛德 年龄 99 来自成都去往上海
    obj.myFun.bind(db,'成都','上海')();   // 玛德 年龄 99 来自成都去往上海
    obj.myFun.bind(db,['成都','上海'])(); // 玛德 年龄 99 来自 成都,上海 去往 undefined

从上面我们可以看出 call bind apply 这三个函数的第一个参数都是 this 的指向对象,第二个参数差别就来了

call 的参数是直接放进去的,参数之间用逗号隔开
apply 的参数必须是存放在数组里面
bind 除了返回是函数外,它的参数和call一样。

当然,三者的参数不限定是string类型,也可以是其他的类型包括函数/对象

上一篇下一篇

猜你喜欢

热点阅读