gpt4 book ai didi

javascript - 使用数组中的参数调用函数 - apply() 而不使用上下文参数?

转载 作者:行者123 更新时间:2023-12-02 20:26:17 25 4
gpt4 key购买 nike

是否有任何方法可以调用函数,但将上下文 this 设置为当我通过执行 fn() 调用函数时它所具有的“默认”值?

此方法应该接受一个数组并将单个元素作为参数传递给函数,就像 apply() 所做的那样:

emitter = new EventEmitter();
args = ['foo', 'bar'];

// This is the desired result:
emitter.emit('event', args[0], args[1], ...);

// I can do this using apply, but need to set the context right
emitter.emit.apply(emitter, 'event', args);

// How can I trim the context from this?
emitter.emit.???('event', args);

编辑:为了澄清这一点,我确实关心 this 在被调用函数内的值 - 它需要是它在以下情况下具有的“正常”上下文:执行emitter.emit(),而不是全局对象或其他任何东西。否则,这有时会破坏事情。

最佳答案

如果您不关心上下文,则可以传递 nullundefined。在函数内部,this will then refer to the global object当处于非严格模式时and to null respectively undefined in strict-mode

函数的“默认”上下文很难定义

function f() { return this };
a = { b: f }
c = a.b;

console.log(f()); # window
console.log(a.b()); # a
console.log(c()); # window

以下哪一个是“正确”的上下文?

根据您的情况,您可能会考虑实用函数

/* you might call it something else */
emitter.emit_all = function (event, args) {
return this.emit.apply(this, [event].concat(args));
}

关于javascript - 使用数组中的参数调用函数 - apply() 而不使用上下文参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11536177/

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