我正在尝试重组一些JavaScript,并且对模块模式感到困惑。
我现在拥有的一种方法是简单地声明一个包含此类组件所有功能的类。
var Foo = function(){
this.Bar = {};
...
}
并创建一个新实例以在组件中使用。但是我也读过有关模块模式的信息,我看不出将其与我所拥有的相比有什么好处,因为它似乎以相同的方式做了同样的事情,只是方式更加复杂。也许我只是没有遇到过使它成为更好选择的情况。例如,这样的模式:
var module = (function () {
// private variables and functions
var foo = 'bar';
// constructor
var module = function () {
};
// prototype
module.prototype = {
constructor: module,
something: function () {
}
};
// return module
return module;
})();
var my_module = new module();
与我已经拥有的似乎没有明显的不同。这种模式让我做什么,而我却无法做到?
两者之间的主要区别在于第一个示例,如果要使用原型,则不能拥有私有变量和函数。您可以拥有私有变量和函数,但前提是您必须通过将公共属性和方法附加到来在构造函数中创建它们this
。
具有私有变量和函数的示例1:
var Foo = function(){
var privateVar = "priv";
function privateFunction(){
console.log(privateVar);
}
this.publicProperty = 1;
this.publicFunction = function(){
console.log(privateVar);
}
}
如果您不想使用原型,则上面没有问题。但是,如果这样做,那么没有第二个示例所受益的新范围,就无法拥有私有变量。
如您所见,您必须将所有内容都包含在构造函数中,而第二个示例可以将构造函数保留为仅用于初始化变量。
相反,第二个示例中的原型方法超出了构造函数的范围,因此它们不能在构造函数中使用任何函数变量。原型方法所需的所有函数和变量必须在外部闭包范围内声明。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句