Javascript动态地将函数附加到对象

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对象”是指“将函数对象添加为对象属性

如何将函数动态附加到javascript对象。例如:如果动态附加的函数是attach(),那么我应该能够将函数fn附加到onject obj,如下所示

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:)