3

我有时会创建这样的课程

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()

有什么好处和坏处,请大神解释一下。

4

3 回答 3

2

如果您想了解不同的 Javascript 模式,我绝对会推荐Learning JavaScript Design Patterns它是免费/开源的,并且会不断更新。

于 2012-08-03T04:10:27.857 回答
2

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

于 2012-08-03T04:04:45.133 回答
1

对于使用模块模式

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

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

正如 TJ Crowder 过去所指出的,它还使我们能够根据环境返回不同的函数。过去,我看到开发人员使用它来执行 UA 测试,以便在他们的模块中提供特定于 IE 的代码路径,但现在我们可以轻松地选择特征检测来实现类似的目标。

于 2012-08-03T04:15:51.580 回答