javaScript:揭示原型(prototype)模式:这两个版本有区别吗?

标签 javascript revealing-prototype

我通常会看到揭示原型(prototype)模式的示例,如下面的语法#2 所示,但我发现语法#1 更加一致。除了语法之外,它们还有什么不同吗?功能方面、性能方面还是其他方面?

语法#1:

function MyClass1(name){
    this.name = name;
}
MyClass1.prototype = new function () {
    var static = 0;

    var getStatic = function () {
        return static;
    }
    this.incStatic = function () {
        static++;
        return getStatic.call(this);
    }
    this.constructor = MyClass1
};

与#2 完全相同:

function MyClass2(name){
    this.name = name;
}
MyClass2.prototype = function () {
    var static = 0;

    function getStatic () {
        return static;
    }
    function incStatic() {
        static++;
        return getStatic.call(this);
    }
    return {
        incStatic:incStatic,
        constructor:MyClass2
    };
}();

这是一个演示完全相同行为的 fiddle :http://jsfiddle.net/arctelix/FSk8z/

这两种语法似乎具有完全相同的结果。但是,我从未见过#1 中所示的示例,所以我想知道为什么?对我来说,#1 只是一种更恒定的语法,我讨厌必须在特殊的返回 block 中识别公共(public)成员。

最佳答案

我个人认为重新分配something.prototype是不合适的。相反,扩展原型(prototype):

(function() {
    var static = 0;
    MyClass.prototype.getStatic() {return static;}
    MyClass.prototype.incStatic() {return static++;}
})();

关于javaScript:揭示原型(prototype)模式:这两个版本有区别吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22131366/

相关文章:

javascript - 揭示原型(prototype) 'this' 上下文

javascript - 使用揭示原型(prototype)模式时出现 "Undefined is not a function"错误

javascript - 如何使用揭示原型(prototype)模式在内部调用重写方法

javascript - 使用 Wordpress 用户或数据库验证 Firebase/Firechat

javascript - 从对象列表中获取属性

javascript - 您可以在 Vuejs 中的模板字符串中动态定义属性吗?

javascript - 如何使用pyqt评估javascript

javascript - 检测 DOM 中的变化