gpt4 book ai didi

javascript - 从对象调用的带有参数的函数

转载 作者:行者123 更新时间:2023-12-02 07:41:27 25 4
gpt4 key购买 nike

我是 javascript 的新手,我正在尝试一些不同的东西。以下面的例子为例:

function obj(){
this.execute = function(codeToExecute){
codeToExecute();
}
}

// Object init and function call

var obj = obj();
obj.execute(function(){
alert("G'Day!");
}

这将执行 alert 消息。到现在为止一切都很好,但现在我正在尝试 alert 通过参数传输的消息:

var obj = obj();
obj.execute(function(message){
alert(message);
}

既然我必须在某处插入该参数,函数 obj() 的结构应该是什么?

我在谷歌上找不到任何有用的东西,因为老实说我不知道​​我应该找什么。谢谢!

最佳答案

您可以扩展 execute 以便将任何其他参数传递给提供的函数:

function Obj() {
this.execute = function(f) {
var args = [].slice.call(arguments, 1);
f.apply(this, args);
}
}

var obj = new Obj();
obj.execute(function(message){
alert(message);
}, "boo!");

这一行是“神奇”的一行:

var args = [].slice.call(arguments, 1);

它使用用于复制数组的 Array.prototype.slice 函数,但(有点)欺骗该函数使用 arguments 伪数组作为源数组(而不是提供的 []),复制除第一个元素之外的所有元素。

你不能只使用 arguments.slice(1) 因为 arguments 不是真正的 JS 数组。它有一个 .length 属性,您可以访问 arguments[n],但是它的 prototype 中没有所有额外的函数> 一个真正的阵列有。尽管 .slice() 的实现并没有更好的了解,但它已经足够接近了。

注意:您应该使用 new 创建对象实例 - 在您的原始代码中,您只是立即调用 obj() 并且然后将(未定义的)结果重新分配回 obj - 该代码根本无法工作。

关于javascript - 从对象调用的带有参数的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10632110/

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