我听过很多关于Javascript: Module Pattern
的消息。但是大多数这些文章都解释了如何创建静态类,即当我们不必处理实例并且我们想要共享创建模块化模式的对象时。有人可以用构造函数解释我这个模式说这个例子:
function Shape(x, y) {
this.x= x;
this.y= y;
}
Shape.prototype.toString= function() {
return 'Shape at '+this.x+', '+this.y;
};
function Circle(x, y, r) {
Shape.call(this, x, y); // invoke the base class's constructor function to take co-ords
this.r= r;
}
Circle.prototype= new Shape();
Circle.prototype.toString= function() {
return 'Circular '+Shape.prototype.toString.call(this)+' with radius '+this.r;
}
如何将其转换为模块化模式?并且以模块化模式方式使用它有什么好处吗?
答案 0 :(得分:0)
使用模块模式的好处是封装。
也许这就是你想要的:
function Shape(x, y) {
function toString() {
return 'Shape at '+x+', '+y;
}
return { toString: toString };
}
var shape = Shape(1, 2);
shape.toString();
然而,这并没有明显的好处。这允许您创建私有变量,但您也可以使用经典构造函数:
function Shape(x, y) {
this.toString = function() {
return 'Shape at '+x+', '+y;
};
};
var shape = new Shape(1, 2);
shape.toString();
或者您可能希望在模块中封装Shape和Circle。在这种情况下,您只需从模块中返回Shape和Circle:
var Module = (function() {
function Shape ...
function Circle ...
return { Shape: Shape, Circle: Circle };
}());
var shape = new Module.Shape(1, 2);