Javascript继承调用行为

时间:2016-08-23 18:12:06

标签: javascript inheritance prototype

正在经历Mozilla's Reference并遇到了这种简单的关系。

function Employee() {
   this.name = "";
   this.dept = "general";
}

function Manager() {
  Employee.call(this);
  this.reports = [];
}
Manager.prototype = Object.create(Employee.prototype);

显然,这形成了从Employee到Manager的类似继承的关系。

这里有两个问题,不确定Employee.call(this);是什么以及为什么 而不是将对象分配给Employee.prototype,而是将其分配给Manager.prototype。我的想法是,Manager是继承自Employee,而不是相反。也许这就是原型链的概念,它实际上意味着两个对象都可以相互抓取属性?

想要澄清一下。

1 个答案:

答案 0 :(得分:2)

  1. Employee.call(this)就像调用Employee()一样,但不是用它来创建新对象,而是修改当前的Manager。在此示例中,它在name
  2. 中设置deptManager
  3. 本声明:

    Manager.prototype = Object.create(Employee.prototype);
    

    表示Employee.prototype.x = val中也可以使用Manager.prototype之类的任何属性。但是如果你在Manager.prototype中覆盖它们,它们将被覆盖 您还应该运行Manager.prototype.constructor = Manager以使该属性正确。