理解一下JavaScript的call,apply,bind的差别

废话不多说,先上代码!

1.

2.

从以上可以看出,第一个例子打印出来的结果表明其 this 指向 obj ,第二个例子再全局声明的names() 函数 this 指向的是 window。



接下来讲讲call, apply, bind ,其实它们都是用来改变 this 的指向的。

用上面的例子eg:

由于 bind() 是默认返回一个新的函数,所以必须调用才会执行。



再对比一下其各自传参的情况(参数可以是各种类型)


其实差距不大,从结果可以看出:

- call,bind,apply 这三个函数的第一个参数都是 this 的指向对象;

- 第二个参数,传参数时,

-- call 是直接写进去,参数之间用逗号隔开;    eg: obj.myInfo.call(obj1, "广州", "深圳", ...);

-- apply 是要把所有的参数放在数组里再放进去,数组里的参数也使用逗号隔开

eg: obj.myInfo.apply(obj1, ["广州", "深圳", ....]);

-- 而 bind 除了返回的结果是一个新的函数之外,传参时是跟 call 一样的。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。