这两种声明原型方法的方法有什么区别?

时间:2015-04-24 16:51:09

标签: javascript coffeescript closures

我现在已经写了一段时间的咖啡,并且碰到了一些特别的东西。

传统上,coffeescript单独声明所有原型方法:

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

然而,MDN表示更好的方法是:

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

有关来源,请参阅this page的最后一个示例。

我的印象是coffeescript试图渲染最好的javascript。一种方式真正比另一方更好(或可能不同),还是仅仅是偏好?

感谢阅读!

编辑:似乎这个问题没有真正的答案,而是归结为意见问题。在删除它之前,我将再保留2个小时。我要感谢大家的意见,这有助于我更好地理解这个主题。

2 个答案:

答案 0 :(得分:3)

coffeescript transpiler并没有提供最好的"可能的javascript。它只是做它的贡献者想要它做的事情。此外,"最好"在某些情况下是一个意见问题,所以无论如何都会有分歧。

答案 1 :(得分:1)

这可能会因为争论而被关闭,但从我的角度来看,第二个是处理(和封装)范围时的一个很好的选择。您会看到很多IIFE,因此您不会在默认(全局)范围内意外引用this。在IIFE中,您限制了与其他模块定义冲突的机会。