动态调用对象上的方法名称

时间:2020-08-02 09:01:19

标签: javascript

虽然调用用户输入的方法是一个糟糕的主意,但是在像Ruby这样的语言中,您可以使用a.method()在Object上调用method(),但也可以使用send(method_name,other_object ),例如:

$ ruby -e "p '1234abc'.send(:to_i)"
1234

ruby -e "puts '1234ab'.method(:to_i).call"
1234

另一个例子:

ruby -e "n1, n2 = 5, 6 ; puts %i(+ - * / fdiv).map { |x| %[#{n1} #{x} #{n2} = #{n1.send(x, n2)}] }"
5 + 6 = 11
5 - 6 = -1
5 * 6 = 30
5 / 6 = 0
5 fdiv 6 = 0.8333333333333334

另一个例子:

$ ruby -e "puts ; n = ->n { print %(Enter #{n}: ) ; STDIN.gets.strip } ; num1 = n.('first value') ; num2 = n.('second value') ; meth = n.('method name') ; puts num1.to_i.send(meth, num2.to_i)"

Enter first value: 5
Enter second value: 10
Enter method name: *
50

$ ruby -e "puts ; n = ->n { print %(Enter #{n}: ) ; STDIN.gets.strip } ; num1 = n.('first value') ; num2 = n.('second value') ; meth = n.('method name') ; puts num1.to_i.send(meth, num2.to_i)"

Enter first value: 50 
Enter second value: 20  
Enter method name: fdiv
2.5

我可以用JS做同样的事情吗?

例如:

var foo = '+'
1.call(foo, 2)    # => 3
8.call('*', 5)    # => 40
'Hello World'.call(split, ' ')    # => ["Hello", "World"]

0 个答案:

没有答案