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=this and 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 as global.add(). And it's more boiler plate than necessary.
Is there a simple hack? Or any simpler solution?
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..
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With