Javascript/Coffeescript/jQuery中是否有Ruby'的等价物;我们送什么?

Javascript/Coffeescript/jQuery中是否有Ruby'的等价物;我们送什么?,javascript,jquery,ruby,coffeescript,metaprogramming,Javascript,Jquery,Ruby,Coffeescript,Metaprogramming,如果我有一个字符串中的方法名,在Ruby中,我可以使用send动态地分派方法,例如 method_name = "delete" send method_name 我也可以利用插值: method_name = "add" send "#{method_name}_task", args 我在javascript中定义了两个函数,一个用于删除,一个用于更新。每个按钮都会动态添加一个按钮,此时,只有delete方法通过按钮绑定 b.on "click", (event) -> eve

如果我有一个字符串中的方法名,在Ruby中,我可以使用
send
动态地分派方法,例如

method_name = "delete"
send method_name
我也可以利用插值:

method_name = "add"
send "#{method_name}_task", args
我在javascript中定义了两个函数,一个用于删除,一个用于更新。每个按钮都会动态添加一个按钮,此时,只有delete方法通过
按钮绑定

b.on "click", (event) ->
  event.preventDefault() # stop submission via postback
  this_button = $(this)
  task_id = this_button.data("task-id")
  delete_task( task_id, this_button )
  false
我希望能够做到这一点:

method_name = "delete"
b.on "click", (event) ->
  event.preventDefault() # stop submission via postback
  this_button = $(this)
  task_id = this_button.data("task-id")
  send "#{method_name}_task", task_id, this_button
  false

这两个函数绑定的唯一区别是这一行。如果有一个明显的方法,那就是减少重复。我在搜索中没有找到任何东西,因此如果有人能帮忙,我将不胜感激。

如果您的方法是在全局范围内定义的,例如

function func_delete(arg1, arg2) {
    // ...
}
只需使用方括号表示法:

var method_name = "func_delete";
window[method_name](arg1, arg2);
否则,可以采用相同的方式使用自定义对象特性:

var methods = {
    func_delete: function() { ... }
};

methods[method_name]();
你需要使用

在Javascript中看起来是这样的:

methodName = "delete";
obj[methodName]();


不过,您总是需要
obj
,因此如果在ruby中
send method\u name
self.send method\u name
相同,那么您可以使用
this[methodName]()

在coffeescript代码中发送什么?在ruby示例中,您有
obj
@Esailija抱歉,如果不清楚,我没有在javascript中使用对象。Ruby自动使用self,即this,因此示例中不需要对象,我只是认为它会更清晰。我会改的,谢谢。“如果没有明确给出接收者,Ruby会自动使用self”,我应该在上面写。
method_name = "delete"
obj.send method_name
methodName = "delete";
obj[methodName]();