(function() {
LoggerBase.prototype.output = function(message) {
console.log('LoggerBase: ' + message);
};
function BookAppLogger() {
LoggerBase.call(this);
this.logBook = function(book) {
console.log('Book: ' + book.title);
}
}
BookAppLogger.prototype = Object.create(LoggerBase.prototype);
}());
在此代码中,BookAppLogger 继承了 LoggerBase 对象的原型(prototype),我认为从最后一条语句可以清楚地看出这一点。我不明白的是 LoggerBase.call(this) 语句的目的。该行的作用是什么?为什么需要它?
最佳答案
BookAppLogger.prototype = Object.create(LoggerBase.prototype);
只会将 LoggerBase.prototype
函数添加到 BookAppLogger.prototype
中,但您无法继承 LoggerBase
函数中编写的函数/属性。例如,如果 LoggerBase
类似于
function LoggerBase () {
this.fname = "First";
this.lname = "Last";
this.fullname = function(){
return this.fname + " " + this.lname;
}
}
LoggerBase.prototype.somefunction = function(){}
如果在BookAppLogger
中没有编写LoggerBase.call(this)
,那么只有LoggerBase somefunction
被继承,而则不会被继承fname、lname、全名
关于javascript - 使用 .call(this) 继承原型(prototype),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30500635/