在javascript中等效的ruby define_method

时间:2015-11-16 16:38:41

标签: javascript

我希望用JavaScript动态创建方法...在ruby(见下文)中我们有define_method,我们在JavaScript中有类似的东西吗?

  define_method 'name_of_the_method' do
    'method code goes in this block'
  end

1 个答案:

答案 0 :(得分:2)

由于Javascript将函数视为第一类对象,因此您可以随时创建和分配它们。结合Function构造函数,等效的是:

function define_method (target, name, code) {
  target[name] = new Function(code);
}

在获取参数时它不是非常友好(它没有任何命名的参数),但会在对象上动态创建一个方法。

如果要将方法附加到该类型对象的每个实例,则应使用:

target.prototype[name] = new Function(code);

如果您提前使用该功能(无需动态编译),您只需使用动态名称和现有功能进行分配:

function define_method(target, name, fn) {
  target[name] = fn;
}

因为Javascript将函数视为对象,所以您可以随时将它们分配给对象(类原型或实例)。