有時我們需要通過名稱調用函數。我可以在普通的JavaScript做如下:通過名稱調用函數
預期和add()
被調用其中一期工程。
等價的CoffeeScript代碼可能會寫成如下。
[email protected]
add=(a,b)->a+b
global['add'](1,2)
其編譯成JavaScript作爲:
(function() {
var add, global;
global = this;
add = function(a, b) {
return a + b;
};
global['add'](1, 2);
}).call(this);
...它不工作。
Microsoft JScript runtime error: Object doesn't support this property or method
是否有解決此問題的簡單方法?
注:
我沒有運行在瀏覽器的代碼,因此不存在窗口對象。但在普通的JS中,我始終可以通過指定
global=this
來捕獲全局範圍,然後從中獲取函數指針。我發現CoffeeScript中的一個解決方案是將所有函數聲明爲像
global.add=[function definition]
這樣的全局對象的成員。但是,我必須通常將該函數調用爲global.add()
。而且它比需要的更多的是鍋爐板。
有沒有簡單的黑客?或者更簡單的解決方案?
這個答案是正確的。當您在CoffeeScript中編寫'x = y'時,您總是在同一個文件中創建'var x'聲明或引用現有的'var x'聲明。在JS世界中,忽略'var'來創建全局變量被廣泛認爲是不好的做法; CoffeeScript強制執行這個約定。 –