我看到一些代码使用这种方式在原型中定义方法:
function Class() {...}
(function() {
this.method1 = function() {...};
this.method2 = function() {...};
}).call(Class.prototype);
这种结构相对于其他结构有什么好处?以下是一些其他示例:
function Class() {...}
Class.prototype = {
method1: function() {...},
method2: function() {...}
};
或者
function Class() {...}
Class.prototype.method1 = function() {...};
Class.prototype.method2: function() {...};
或者
function Class() {...}
Class.prototype = Object.create({...}, {...});
Class.prototype.constructor = Class;
以下内容可能在内存效率方面稍显不足,因为每个实例都有自己的method1和method2副本:
function Class() {
var privateVar = 0;
this.method1 = function() {...};
this.method2 = function() {...};
}
当然,这种结构的好处在于方法可以访问私有变量。
Object.prototype
并且传递了具有相同属性描述符的方法。*(第四个还将.constructor
添加回去,而第二个则没有)*。最后一个不使用继承。第一/第三和第二/第四之间的区别很小。 - cookie monster