如果我在一个对象的构造函数之外声明基本原型对象,那么所有创建的对象都基于那个不适合我需要的单个基础对象,因为我需要多个基础对象的实例。
简而言之:这段代码是否正确?它有效,但我对于拥有正确的代码非常挑剔。
示例:
function BaseObject()
{
BaseObject.prototype.insertObject = function()…
…
… // Some other functions.
}
function Object1()
{
Object1.prototype = new BaseObject();
Object1.prototype.coolFunction = function()…
…
… // Same kind of pattern.
}
function Object2()
{
Object2.prototype = new Object1();
Object2.prototype.incredibleFunction = function()…
…
… // You get the idea.
}
答案 0 :(得分:0)
不,当前在构造函数中的所有代码都应该在它们之外。现在,每当有人创建新对象时,您都会重新分配原型的这些属性。
最后,良好实践要点:
constructor
属性。这是JS继承的一个怪癖;它被覆盖了。人们很少依赖constructor
属性是正确的,但有时他们会这样做,如果你不这样做,那就错了。Object.create(Base.prototype)
优于new Base()
。它只是实例化对象,而不是创建它,这很好,因为你不需要对象的实际副本来执行原型继承。这看起来都像:
function BaseObject() { }
BaseObject.prototype.insertObject = function () { };
function Object1() { }
Object1.prototype = Object.create(BaseObject.prototype);
Object1.prototype.constructor = Object1;
Object1.prototype.coolFunction = function () { };
function Object2() { }
Object2.prototype = Object.create(Object1.prototype);
Object2.prototype.constructor = Object2;
Object2.prototype.incredibleFunction = function () { };
答案 1 :(得分:0)
一般模式:
function Base ( baseMember ) {
this.baseMember = baseMember;
}
Base.prototype.baseFunc = function () {};
function Derived ( baseMember, derivedMember ) {
Base.apply( this, arguments );
this.derivedMember = derivedMember;
}
Derived.prototype = Object.create( Base.prototype );
Derived.prototype.constructor = Derived;
Derived.prototype.derivedFunc = function () {};
这很难看,我知道......