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:
-
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=thisand then get the function pointer from it. -
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 asglobal.add(). And it’s more boiler plate than necessary.
Is there a simple hack? Or any simpler solution?
Your
addis a local variable. Useto attach it to the
globalobject. Sinceglobalis the global scope of your script you can still calladdwithout prefixing it withglobal..