【发布时间】:2014-12-08 13:09:37
【问题描述】:
我正在阅读 Mozilla 文档 (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Details_of_the_Object_Model) 中给出的 JavaScript 对象模型,并且有一个可能非常愚蠢的问题。
如您所见,它描述了一个基于原型的继承层次结构(Manager 继承自 Employee),如下所示:
function Employee() {
this.name = "";
this.dept = "general";
}
function Manager() {
Employee.call(this);
this.reports = [];
}
Manager.prototype = Object.create(Employee.prototype);
最后一行不应该说Employee而不是Employee.prototype吗?如果我们要构建原型链,我认为应该是前者。请解释一下。
【问题讨论】:
-
因为
Object.create需要一个原型作为第一个参数。 -
@Passerby 在这种情况下,
name和dept会自动添加到Employee.prototype吗?如果没有,我想知道Manager如何访问它们?Object.create()函数是否神奇地沿着原型链向下移动并找出添加了哪些属性? -
IMO
name和dept在这种情况下不低于Employee.prototype,它们只是附加到每个Employeeinstance 的两个属性。Managerinstances 也可以通过Employee.call(this)“构造”过程获得这两个属性。 -
@Passerby 非常有趣的观察!是的,我完全忘记了
call()方法。 -
另外,
nameis a property inFunction's prototype,这可以解释为什么@VladZ 中缺少name。的案例 #2。
标签: javascript