gpt4 book ai didi

Javascript 使用 `apply()` 传递参数数组,但保留 `this` 对 `call()` 的引用

转载 作者:数据小太阳 更新时间:2023-10-29 05:04:34 25 4
gpt4 key购买 nike

我需要结合 JavaScript 的 call()apply() 方法的强大功能。我遇到的问题是 call() 保留了对 this 的正确引用,但是当我需要它作为函数参数发送时,将我拥有的参数数组作为数组发送. apply() 方法在使用数组时将参数发送到函数就好了,但我不知道如何向它发送对 this 的正确引用,call() 方法好像天生就可以访问。

下面是我所拥有的代码的简化版本,它可能看起来毫无用处,但它是表达要点的好方法:

// AN OBJECT THAT HOLDS SOME FUNCTIONS
var main = {};
main.the_number = 15;
main.some_function = function(arg1, arg2, arg3){
// WOULD VERY MUCH LIKE THIS TO PRINT '15' TO THE SCREEN
alert(this.the_number);
// DO SOME STUFF WITH THE ARGUMENTS
...
};
// THIS STORES FUNCTIONS FOR LATER.
// 'hub' has no direct knowledge of 'main'
var hub = {};
hub.methods = [];
hub.methods.push(main.some_function);
hub.do_methods = function(arguments_array){
for(var i=0; i<this.methods.length; i++){
// With this one, '15' is printed just fine, but an array holding 'i' is
// just passed instead if 'i' itself
this.methods[i].call(arguments_array);
// With this one, 'i' is passed as a function argument, but now the
// 'this' reference to main is lost when calling the function
this.methods[i].apply(--need a reference to 'main' here--, arguments_array);
}
}

最佳答案

什么? Apply passes the scope as well ...

method.apply(this, [args]);

编辑:

在您的代码中,您在包含范围内定义了主要对象,因此您可以简单地做;

this.methods[i].call(main);

this.methods[i].apply(main, [args]);

关于Javascript 使用 `apply()` 传递参数数组,但保留 `this` 对 `call()` 的引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10708173/

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