我是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);
}
现在我必须在某处插入该参数,function obj()
的结构应该是什么?
我在google上找不到任何有用的东西,因为说实话,我不确切知道我应该寻找什么。谢谢!
答案 0 :(得分:4)
您可以扩展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
伪数组作为源数组(而不是提供的{{1复制除第一个之外的所有元素。
您不能只使用[]
,因为arguments.slice(1)
不是真正的 JS数组。它具有arguments
属性,您可以访问.length
,但它的arguments[n]
中没有真正数组所具有的所有额外函数。虽然prototype
的实现并不是更好,但它足够接近。
注意:您应该使用.slice()
创建一个对象实例 - 在原始代码中,您只需立即调用 new
,然后重新分配(未定义的)结果到obj()
- 该代码根本无法工作。
答案 1 :(得分:2)
你可以这样做:
function obj(){
this.execute = function(codeToExecute, arg){
codeToExecute(arg);
}
}
var obj = new Obj();
obj.execute(function(message){
alert(message);},
"yourmessage");
基本上,你将2个参数传递给你的obj.execute:函数和该函数的参数。
答案 2 :(得分:1)
你可以使用好的旧set / get方法。下面我将消息传递给对象构造函数,可以使用getMessage
函数访问它。如果您不想传入构造函数
function Obj(message){
this.getMessage = function(){
return message;
}
this.execute = function(codeToExecute){
codeToExecute();
}
}
var obj = new Obj("hello");
obj.execute(function(){
alert(obj.getMessage());
});