通过名称调用函数 [英] Calling a function by its name

查看:85
本文介绍了通过名称调用函数的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

有时我们需要通过名称来调用函数。我可以用普通的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?

注意:


  1. 我没有在浏览器中运行代码,因此没有窗口对象。但是在普通JS中,我总是可以通过分配 global = this 来捕获全局范围,然后从中获取函数指针。

  1. 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆