JavaScript编码差异

时间:2012-08-03 03:59:00

标签: javascript oop class

我有时会像这样创建类

function class1(){
.....
   class1.prototype.callme = function(){
      alert("hai");
   }
}
then I instantiate using (new class1()).callme();

有时我使用模块化模式

var class2 = (function(){
var privatemethod = function(){
....
}
var publicmethod = function(){
alert("am public");
}
return{
callme:publicmethod
}
})();

then I call class2.callme()

优势和劣势是什么,有些人可以解释一下。

3 个答案:

答案 0 :(得分:2)

第一个是构造函数,第二个是对象,所以它们不一样。您可能希望在不同情况下使用其中一个或其他。在任何情况下,您通常都会在构造函数之外声明原型,并使用this.property作为公共方法和变量。第二个选项不能作为一个类重用,除非你使用像jQuery的extend或Underscore的_extend这样的东西,这是我通常的方式,没有原型链膨胀代码似乎更简单。

答案 1 :(得分:2)

如果你想了解不同的Javascript模式,我肯定会推荐Learning JavaScript Design Patterns它的免费/开源并不断更新。

答案 2 :(得分:1)

使用Module pattern

  

拥有私人功能的自由,这些功能只能由我们的模块使用。因为它们没有暴露给页面的其余部分(只有我们导出的API),所以它们被认为是真正的私有。

     

鉴于函数被正常声明并且被命名,当我们试图发现什么函数引发异常时,在调试器中显示调用堆栈会更容易。

     

正如T.J Crowder过去指出的那样,它也使我们能够根据环境返回不同的功能。在过去,我见过开发人员使用它来执行UA测试,以便在他们的模块中提供特定于IE的代码路径,但是我们现在可以轻松选择功能检测来实现类似的目标。