Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Calling a function by its name

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)

Which works as expected and add() gets called.

Equivalent CoffeeScript code might can be written as below.

global=@
add=(a,b)->a+b
global['add'](1,2)

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?

Note:

  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.

  2. 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?

like image 489
CDR Avatar asked Jul 23 '26 22:07

CDR


1 Answers

Your add is a local variable. Use

@add=(a,b)->a+b

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..

like image 146
Marcel Jackwerth Avatar answered Jul 26 '26 12:07

Marcel Jackwerth



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!