我想知道是否有更好的方法向现有对象添加动态方法。基本上,我尝试动态组合新方法,然后将它们附加到现有函数。
此演示代码有效。
builder = function(fn, methods){
//method builder
for(p in methods){
method = 'fn.' + p + '=' + methods[p];
eval(method);
}
return fn;
}
test = {}
test = builder(test, {'one':'function(){ alert("one"); }','two':'function(){ alert("two"); }'} );
test.one();
test.two();
最佳答案
您不需要每次都评估它们。
您可以创建现有的函数对象,然后将它们作为属性分配给您的对象。
var methods = {
'increment': function() { this.value++; },
'display' : function() { alert(this.value); }
};
function addMethods(object, methods) {
for (var name in methods) {
object[name] = methods[name];
}
};
var obj = { value: 3 };
addMethods(obj, methods);
obj.display(); // "3"
obj.increment();
obj.display(); // "4"
然而,规范的、面向对象的方法是使用构造函数和原型(prototype),但这并不是真正动态的,因为您构造的每个对象都将具有相同的方法:
function MyObj(value) {
this.value = value;
};
MyObj.prototype.increment = function() {
this.value++;
};
MyObj.prototype.display = function() {
alert(this.value);
}
var obj = new MyObj(3);
obj.display(); // "3"
obj.increment();
obj.display(); // "4"
关于Javascript:添加动态方法的更好方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/584907/