在闭包中使用原型模式

我一直在Javascript中使用原型和闭包模式来摆弄一下。 正如你可能知道的那样,当使用闭包模式时会有性能损失,因为它为对象的每个实例重新定义了相同的函数。 然而,闭包模式确实允许私有变量,这使得封装更容易。

以下是原型模式的典型示例:

function Foo(val) {
    this.val = val;
}

Foo.prototype.getVal = function() {
    return this.val;
}

var f = new Foo(42);

我在想,为什么你不能做这样的事情?

function Parent() {

}

Parent.prototype.getVal = function() {
    return this.val;
}

function foo(val) {
    function Obj {
        this.val = val;
    }

    Obj.prototype = new Parent();

    return new Obj();
}

var f = foo(42); // Note the missing 'new'

这允许在foo()函数中使用私有变量,甚至可以在foo()函数中动态设置原型。

我做了一个jsperf.com测试,其中显示了性能上的巨大差异,但我不知道为什么。


性能上的差异很可能是因为您创建两个对象而不是一个。 您正在创建一个额外的对象,仅用作另一个对象的原型。

如果你想创建许多像这样的对象,你应该创建一个原型对象并将其用作你创建的所有对象的原型。

链接地址: http://www.djcxy.com/p/60773.html

上一篇: Using a prototype pattern in a closure

下一篇: Understanding the difference between Object.create() and new SomeFunction()