2015-04-24 52 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中,你正在限制与其他模块定义相冲突的机会。

相关问题