在JavaScript中,自调用`call`的目的是什么?

时间:2017-11-30 20:52:28

标签: javascript

我正在维护一个原作者不再在公司工作的javascript库。

我发现整个图书馆重复了以下模式:

 var events = {}; // defined globally

 // many lines below within a function:
 if(!events.hasOwnProperty.call(events, eventKey)) return;

以这种方式使用call是否能提供任何技术优势而不仅仅是:

if (!events.hasOwnProperty(eventKey)) return;

我觉得前者不如后者那么直观,而后者则更具表现力,假设输出相同

1 个答案:

答案 0 :(得分:1)

两者都是一样的!没有差别。任何对象{}都有方法hasOwnProperty()Object.prototype.hasOwnProperty),什么是函数(或函数对象),任何函数(-object)都有方法call()({{ 1}})mdn-docs

Function.prototype.call的第一个参数是»this context / object«,或context / sidecar / this / that / etc ...

因此,在您的情况下:Function.prototype.call()events.hasOwnProperty.call(events, …)完全相同,因为在第一种情况下events.hasOwnProperty(…)将是events,因为它是第一次使用this的论点。在后一种情况下,call()也将是events,因为如果你this,JS将始终在每个对象的方法上自动设置上下文/。

或代码:

obj.method()