0

我在一些测试中看到,使用原型方法可以提高代码执行的性能并减少内存消耗,因为方法是按类创建的,而不是按对象创建的。同时我想在我的类中使用模块模式,因为它看起来更好并且允许使用私有属性和方法。

代码布局如下:

var MyClass = function() {
var _classProperty = "value1";

var object = {
  classProperty : _classProperty
};

object.prototype = {
  prototypeProperty = "value2"
}

return object;
}

但是这种情况下的原型不起作用。我发现原因是为函数而不是对象设置了原型。所以我想我应该使用object.__proto__.prototype而不是只是object.prototype. 但__proto__并非所有浏览器都支持,也不符合 ECMAScript5 规则。

那么有没有更好的方法在模块模式对象构造函数中使用原型呢?

4

2 回答 2

1

您必须设置构造函数的原型:

var MyClass = function() {
    var _classProperty = "value1";
    this.classProperty = _classProperty;
};

MyClass.prototype = {
    prototypeProperty : "value2"
};

var instance = new MyClass();
console.log(instance.classProperty); //value1
console.log(instance.prototypeProperty); //value2

小提琴

编辑

这不是模块模式的实现,而是构造函数模式。不过,它允许私有属性和方法(在 JavaScript 允许的范围内)。但是,如果您的目标确实是实现模块模式,请查看 Bergi 的答案。

于 2013-06-03T12:28:38.260 回答
1

prototype属性是您必须在构造函数上设置的属性。并且模块模式使用 IEFE(用于局部变量),它返回“类”构造函数。

var MyClass = (function() {
    var _classProperty = "value1";

    function MyClass() {
        this.instanceProperty = …;
        …
    }

    MyClass.prototype.prototypeProperty = "value2";
    …

    return MyClass;
})();

然后:

var instance = new MyClass;
console.log(instance.instanceProperty);
console.log(instance.prototypeProperty);
于 2013-06-03T12:29:05.083 回答