ank*_*981 6 javascript prototypal-inheritance
我在解析JavaScript中的原型继承方面遇到了一些麻烦,并想到在这里发布它.考虑这个简单的例子:
function Employee() {
this.name = "Rob";
this.dept = "R&D";
}
function Manager() {
//Employee.call(this);
this.reports = ["Report 1", "Report 2", "Report 3"];
}
Manager.prototype = Object.create(Employee.prototype);
Employee.prototype.type = "human";
m = new Manager();
console.log(m.name); //undefined
console.log(m.type); //human
Run Code Online (Sandbox Code Playgroud)
我无法理解的是线路的实用性Employee.call(this).既然我们要将Employee.protoype设置为Manager的原型,那么(我认为)显然强制在Employee中创建变量的需要是call()什么?之前我认为可能是因为没有对象Employee存在,并且JS继承无法在没有对象的情况下工作,所以call()这里服务于"完成对象构建".但是,该type属性在Manager中反映出来而不需要call(),这证明我们不需要硬对象来执行继承(我的意思是,只是类类构造函数定义会这样做).
我希望我没有把它变得太复杂.简而言之:为什么call()需要这里,为什么财产type没有工作call()(如果call()那么重要,那就是).
的目的Employee.call(this)是为Manager实例添加姓名和部门属性。
的使用call()更符合惯例,它允许就地修改调用者(this)。
type自从您使用原型界面以来,该属性就起作用了。
如果取消注释Employee.call(this),则 m.name 将变为“Rob”。
| 归档时间: |
|
| 查看次数: |
61 次 |
| 最近记录: |