2015-04-24 81 views
4

我一直在寫coffeescript一段時間,並遇到了一些奇怪的東西。這兩種聲明原型方法的方式有什麼區別?

傳統CoffeeScript的單獨聲明所有原型方法,如這樣的:

MyClass.prototype.firstMethod = function(){...}; 
MyClass.prototype.secondMethod = function(){...}; 

然而,MDN說,更好的辦法是這樣:

(function() { 
this.firstMethod = function(){...}; 
this.secondMethod = function(){...}; 
}).call(MyClass.prototype); 

對於源請參閱盡頭this page的示例。

我的印象是,咖啡標記試圖呈現最好的JavaScript。一種方式是否真的比另一種更好(或者可能不同)?還是僅僅是偏好?

感謝您的閱讀!

編輯:似乎這個問題沒有真正的答案,並歸結爲意見的問題。在刪除它之前,我會再保留它2個小時。我想感謝每個人的意見,這有助於我更好地理解這個話題。

+0

我想有一個改進可以更容易地將相同的方法添加到多個類中,比如'function add_methods(MyClass){這裏的第二個代碼塊}'。 –

+0

MDN並沒有說第二個*更好*,他們說它是*更清晰*:「上面的代碼也可以用更清晰的方式寫出來,結果相同。」 –

+0

@ muistooshort你在技術上是正確的。你建議MDN建議它偏好並沒有其他影響。清潔工可能會更好,但這是主觀的。我想如果沒有人能提供使用其中一種的實際獨家利益,我希望得到普遍的一致意見。 – user3669257

回答

3

咖啡標記transpiler不呈現「最好的」可能的JavaScript。它只是做貢獻者想要它做的事情。另外,「最好」在某些情況下是意見問題,因此無論如何都會有差異。

1

由於存在爭議,這可能會被關閉,但從我的角度來看,第二個是處理(和封裝)範圍時的一個很好的選項。您會看到很多IIFE,因此您不會在默認(全局)範圍內意外引用this。在IIFE中,你正在限制與其他模塊定義相沖突的機會。

相關問題