Rob*_*cha 5 javascript inheritance
代码来自MDN:
function Employee() {
this.name = "";
this.dept = "general";
}
function Manager() {
Employee.call(this);
this.reports = [];
}
Manager.prototype = Object.create( Employee.prototype );
function WorkerBee() {
Employee.call(this);
this.projects = [];
}
WorkerBee.prototype = Object.create( Employee.prototype );
var x = new WorkerBee();
console.log( x );
Run Code Online (Sandbox Code Playgroud)
输出: WorkerBee {name: "", dept: "general", projects: Array[0]}
有什么影响Employee.call(this);?我知道通过运行代码,继承成功是必要的..call()简单陈述的文档,
方法调用具有给定此值的函数和单独提供的参数.
好的,所以它调用构造函数,Employee()但没有使用new运算符,也没有return返回对象及其属性.如何Employee.call(this)导致子对象继承父属性?
如果省略此行,则只有projects数组作为属性存在.
所做call的只是用给定的上下文调用函数this。在您的示例中,这意味着Employee调用函数时this其内部是 的实例WorkerBee。因此,在这种情况下发生的情况是,当执行时,它会创建并为此时的对象Employee设置自己的属性。thisWorkerBee
检查运行代码时控制台记录的内容:
function Employee() {
console.log(this instanceof WorkerBee);
this.name = "";
this.dept = "general";
}
Run Code Online (Sandbox Code Playgroud)
...你会看到它this确实指向 的对象实例WorkerBee。
此模式用于使一个构造函数在外部宿主对象(上下文)上创建自己的属性。它也被称为“借用构造函数”。