Javascript:添加动态方法的更好方法?

标签 javascript dynamic methods

我想知道是否有更好的方法向现有对象添加动态方法。基本上,我尝试动态组合新方法,然后将它们附加到现有函数。

此演示代码有效。

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/

相关文章:

javascript - 向 JavaScript 对象添加方法

javascript - 如何在调整浏览器大小时将 Google map 标记设置为中心?

python - 如何在 R 中迭代时动态修改向量

javascript - 如何仅在移动设备上添加新按钮导航栏 View (使用 Bootstrap )

python - 如何使用动态数量的数据条目初始化表单集

python - 动态导入模块导致 ImportError

ruby-on-rails - 如何重构 "shared"方法?

ruby - 我可以向现有 Ruby 类添加自定义方法吗?

javascript - 如何确定顶部元素?

Javascript - Math.random 函数在 for 循环中调用时返回相同的结果