Javascript动态地将函数附加到对象
如何将函数动态附加到javascript对象。例如:如果动态附加的函数是attach(),那么我应该能够将函数fn附加到onject obj,如下所示Javascript动态地将函数附加到对象,javascript,object,methods,Javascript,Object,Methods,如何将函数动态附加到javascript对象。例如:如果动态附加的函数是attach(),那么我应该能够将函数fn附加到onject obj,如下所示 attach( obj,fn,{ alert(1) } ) function attach(obj,fnName,code) { obj[fnName] = code; } 如果“将函数动态附加到javascript对象”是指“将函数对象添加为对象属性
attach(
obj,fn,{
alert(1)
}
)
function attach(obj,fnName,code)
{
obj[fnName] = code;
}
如果“将函数动态附加到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(obj, fnName, function(){ alert(1); });
注意:attach()
函数实际上一点也不省力,事实上它只给你更多的字符来输入
顺便说一下(但不要这样做),如果要作为code
传递的参数是一个代码字符串,请执行以下操作:
var code = "alert(0);";
obj[fnName] = new Function(code);
更多信息:假设函数的定义是attach,您应该这样调用它:
// attach an anonymous function:
attach(obj, "newFunctionName", function() { alert(1); });
// attach a function defined elsewhere
attach(obj, "newFunctionName", someFunction);
attach(obj, fnName, function(){ alert(1); });
您调用它的方式是无效语法
此外,正如您可能已经注意到的,这不是一个非常有用的函数,因为您可以使用单行函数定义执行相同的操作:
obj[fnName] = function(){ alert(1); });
编辑:另一篇文章的功能(代码)解决方案看起来更好。我不知道那个构造器 一种可能的解决办法是:
Object.prototype.attach = function(name,code) {
this.name = function() {
eval(code);
};
}
如果已经定义了函数对象,则可以将其作为函数对象附加,例如: 您还可以使用新的函数构造函数动态定义函数,例如: 下面解释一下eval和新函数构造函数之间的区别: 作为警告,eval()和新函数构造函数的使用引起了争议,并且(在某种程度上)受到了许多人的谴责,例如: 以下是有关评估的更多信息:
下面是关于新函数构造函数的更多信息:eval肯定会增加时间复杂度:)作为字符串示例的
code
正是我想要的,thx:)