javascript - 使用 .call(this) 继承原型(prototype)

标签 javascript prototype

(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/

相关文章:

javascript - 扩展 Javascript 类和继承

javascript - 多次评估或加载远程脚本

javascript - 将 JavaScript 代码迁移到带有 String.prototype 扩展的 node.js 模块

javascript - jQuery 侧边栏两次单击不会再次加载脚本

javascript - 在 JavaScript 中将最低有效数字移出十六进制序列

javascript - 为什么在MSE播放前调用 'endOfStream'?

javascript - 为什么 Math.prototype 未定义?

Javascript无需实例化即可访问原型(prototype)中的变量

javascript - 使用 Javascript、Canvas 和 Alpha 检测进行碰撞检测

javascript - 为什么ajax下的javascript actionlink函数在mvc中不起作用