通过名称调用函数 [英] Calling a function by its name
问题描述
有时我们需要通过名称来调用函数。我可以用普通的JavaScript实现如下:
Sometimes we need to call a function by its name. I can do it in plain JavaScript as below:
global=this
function add(a,b){return a+b}
global['add'](1,2)
哪个有效正如预期的那样, add()
被调用。
Which works as expected and add()
gets called.
等效的CoffeeScript代码可以写成如下。
Equivalent CoffeeScript code might can be written as below.
global=@
add=(a,b)->a+b
global['add'](1,2)
编译为JavaScript:
which compiles to JavaScript as:
(function() {
var add, global;
global = this;
add = function(a, b) {
return a + b;
};
global['add'](1, 2);
}).call(this);
......它不起作用。
...and it doesn't work.
Microsoft JScript runtime error: Object doesn't support this property or method
这个问题有一个简单的解决方案吗?
Is there an easy solution to this problem?
注意:
-
我没有在浏览器中运行代码,因此没有窗口对象。但是在普通JS中,我总是可以通过分配
global = this
来捕获全局范围,然后从中获取函数指针。
I am not running the code in a browser therefore there is no window object. But in plain JS I can always capture the global scope by assigning
global=this
and then get the function pointer from it.
我发现CoffeeScript中的一个解决方案是将所有函数声明为全局对象的成员,如 global.add = [function definition]
。但是我必须通常将该函数称为 global.add()
。它的锅炉板比必要的多。
One solution in CoffeeScript I found is by declaring all functions as member of a global object like global.add=[function definition]
. But then I have to normally call the function as global.add()
. And it's more boiler plate than necessary.
有没有简单的黑客攻击?或者更简单的解决方案?
Is there a simple hack? Or any simpler solution?
推荐答案
您的 add
是一个局部变量。使用
Your add
is a local variable. Use
@add=(a,b)->a+b
将其附加到全局
对象。由于 global
是您脚本的全局范围,您仍然可以调用 add
,而不用作为前缀全球。
。
to attach it to the global
object. Since global
is the global scope of your script you can still call add
without prefixing it with global.
.
这篇关于通过名称调用函数的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!