使用模块化模式创建构造函数

时间:2011-09-11 15:29:18

标签: javascript jquery

我听过很多关于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;
}

如何将其转换为模块化模式?并且以模块化模式方式使用它有什么好处吗?

1 个答案:

答案 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);