【发布时间】:2019-02-25 15:48:59
【问题描述】:
重置原型实现继承是正常的。然后我们修复构造函数属性。但是为什么我们可以先修复构造函数属性然后重置原型?
方式1:
function inheritPrototype(subType,superType){
var o1 = Object.create(superType.prototype);
o1.constructor = subType;
subType.prototype = o1;
}
方式2:
function inheritPrototype(subType,superType){
var o1 = Object.create(superType.prototype);
subType.prototype = o1;
o1.constructor = subType;
}
当我console.log(o1.constructor) 时,我发现way1 和way2 都可以改变o1.cobstructor。我可以理解way2,因为它在重置原型(正常)后修复了构造函数。但是way2呢?我无法理解 way2 仍然有效,因为o1.constructor = subType 和 subType.prototype = o1; 的顺序是错误的。
PS:
重置原型就像:
subType. prototype= superType
因为它改变了什么子类型。原型指向,我们需要修复构造函数
修复构造函数就像:
subType. prototype.constructor= subType
这使得subType. prototype.constructor 再次指向 subType。
【问题讨论】:
-
我不确定您所说的“重置原型”是什么意思。您能否解释一下您认为那里发生了什么,以及这将如何影响
constructor分配? -
看帖子底部的PS
-
您似乎仍然对“设置原型”的含义感到困惑。它只是两个具有两个普通属性的对象,
.prototype和.constructor。我们希望它们相互指向。顺序无关紧要,它们不会相互影响。影响o1.constructor的是它从superType.prototype继承了属性,因为Object.create。
标签: javascript inheritance prototype