В своем последнем абзаце вы сказали, что выражение «исправление конструктора» было subType.prototype.constructor = subType;
, но это не то, что в примерах кода.В ваших примерах кода это o1.constructor = subType
.Если бы это был первый, то порядок имел бы значение, и работал бы только way2.
Вместо этого он использует o1.constructor = subType
.Порядок не имеет значения, потому что o1
не изменяется оператором subType.prototype = o1;
, поэтому он не может влиять на действия o1.constructor = subType
.
Все эти три версии работают:
function inheritPrototype(subType,superType){
var o1 = Object.create(superType.prototype);
subType.prototype = o1;
o1.constructor = subType;
}
function inheritPrototype(subType,superType){
var o1 = Object.create(superType.prototype);
o1.constructor = subType;
subType.prototype = o1;
}
function inheritPrototype(subType,superType){
var o1 = Object.create(superType.prototype);
subType.prototype = o1;
subType.prototype.constructor = subType;
}
Но это не так, поскольку он устанавливает свойство конструктора для старого значения subType.prototype
вместо o1
:
function inheritPrototype(subType,superType){
var o1 = Object.create(superType.prototype);
subType.prototype.constructor = subType;
subType.prototype = o1;
}