gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 02:56:51 25 4
gpt4 key购买 nike

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

我发现以下模式在整个库中重复出现:

 var events = {}; // defined globally

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

以这种方式使用 call 是否比仅仅这样做提供任何技术优势:

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

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

最佳答案

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

Function.prototype.call() 的第一个参数是“this context/object”,或 context/sidecar/this/that/etc...

因此,在您的情况下: events.hasOwnProperty.call(events, …)events.hasOwnProperty(…) 完全相同,因为在第一个中case events 将为 this,因为它被用作 call() 的第一个参数。在后一种情况下,events 也将是 this,因为如果你执行 obj.method,JS 总是会在每个对象的方法上自动设置 context/this ().

或者在代码中:

var 
A = { log: console.log(this) },
B = {};

A.log() // A
A.log.call(A) // A

A.log.call(B) // B

关于javascript - 在 JavaScript 中,自调用 `call` 的目的是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47582410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com