gpt4 book ai didi

javascript - 'self.fn.apply(self, message)' 和 'self.fn(message)' 之间有什么不同,为什么使用第一种方法?

转载 作者:行者123 更新时间:2023-12-02 15:49:59 28 4
gpt4 key购买 nike

我总是找到一些类似的代码newPromise.promiseDispatch.apply(newPromise, message),我不明白为什么不使用newPromise.promiseDispathch(message)

最佳答案

最大的区别是apply需要一个 this 绑定(bind)和参数数组,而不是通过括号调用单独列出每个参数。

例如,如果 foo.bar = (...args) => console.log(args),则调用 foo.bar.apply(foo, [1, 2 , 3]) 将记录 1, 2, 3 (即数组的每个元素的三个单独的参数)和 foo.bar([1, 2, 3] ) 将记录 [1, 2, 3] (数组对象作为单个参数)。

call函数上的方法更相当于用括号调用,因为它单独获取每个参数。形式 foo.bar.call(foo, 1, 2, 3)foo.bar(1, 2, 3) 是等效的。

当传递的作用域与对象不匹配时(foo.bar.call(baz, ...)),通常会看到使用任一方法,因为这为以下方法提供了动态作用域:之前没有绑定(bind)过。当参数被视为或收集到数组中时,您还会看到使用 apply ,特别是在日志记录等中(let args = [clazz, level, timestamp, ...msg]; logger.apply(this, args);).

关于javascript - 'self.fn.apply(self, message)' 和 'self.fn(message)' 之间有什么不同,为什么使用第一种方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921616/

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