如何动态地将函数附加到javascript对象。例如:如果动态附件的函数是attach(),那么我应该能够将函数fn附加到onject obj,如下所示。
attach(
obj,fn,{
alert(1)
}
)
function attach(obj,fnName,code)
{
obj[fnName] = code;
}
答案 0 :(得分:6)
如果通过“将函数动态附加到javascript对象”意味着“将函数对象添加为对象属性”,那么您已经显示的语法几乎是正确的。这应该是:
var fnName = "testFunc";
obj[fnName] = function() { alert("Test function"); };
// or
obj.testFunc = function() { ... };
// or
obj[fnName] = nameOfFunctionDefinedElsewhereInCurrentScope;
这意味着您可以像这样调用attach()
函数:
// attach an anonymous function:
attach(obj, "newFunctionName", function() { alert(1); });
// attach a function defined elsewhere
attach(obj, "newFunctionName", someFunction);
注意:attach()
函数根本不会省去任何努力,事实上它只是为你提供了更多的字符来输入......
顺便说一句(但不要这样做),如果你想传递给code
的参数是一串代码,那么这样做:
var code = "alert(0);";
obj[fnName] = new Function(code);
更多信息:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function
答案 1 :(得分:1)
假设函数attach的定义,你应该像这样调用它:
attach(obj, fnName, function(){ alert(1); });
您调用它的方式是无效的语法。
此外,您可能已经注意到,这不是一个非常有用的功能,因为您可以使用单行函数定义执行相同的操作:
obj[fnName] = function(){ alert(1); });
答案 2 :(得分:0)
如果已经定义了它们,可以将它们作为函数对象附加,例如:Javascript: better way to add dynamic methods?
您还可以使用新的Function构造函数动态定义函数,例如:Creating functions dynamically in JS
以下是对eval和新Function构造函数之间差异的解释:Are eval() and new Function() the same thing?
作为警告,使用eval()和新的Function构造函数引起了争议,并且在某种程度上受到了许多人的谴责,例如:Legitimate uses of the Function constructor
以下是有关eval的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/eval
以下是有关新Function构造函数的更多信息:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function
答案 3 :(得分:-1)
编辑:其他帖子的功能(代码)解决方案似乎更好。我不知道那个构造函数。
可能的解决方案可能是:
Object.prototype.attach = function(name,code) {
this.name = function() {
eval(code);
};
}