JavaScript 原型(prototype)继承困惑——我在这里错过了什么?

标签 javascript prototypal-inheritance

我正在努力研究一个我以前认为我理解的主题 - JavaScript 中的原型(prototype)继承。

我有一个 jsfiddle 概述了我的问题 here

我有一个基础对象和一个继承实现。我希望实现对基础的属性进行更改,并让基础访问这些更新后的属性。

谁能指出我哪里出错了?

最佳答案

当您调用 new cheeseBase() 时,this 的值是您在“cheddar()”内部用作原型(prototype)的对象,并且 不是“切达干酪”的实例。因此,“saySomething()”函数总是说“all cheese”,因为它指的是构造函数调用中“捕获的”this

如果您将“saySomething()”更改为在“alert()”调用中引用“this.favoriteCheese”,它会在弹出窗口中显示“cheddar”。

如果您真的希望子类修改基对象,或者,您可以重新排列:

function cheesebase() {

    var that = this;

    this.favouriteCheese = "all cheese";

    this.setBaseCheese = function(chz) {
      that.favouriteCheese = chz;
    };

    this.saySomething = function() {
        alert("My favourite cheese is " + that.favouriteCheese);
    };
}

function cheddar() {

    var returnObject = Object.create(new cheesebase());

    returnObject.setBaseCheese("cheddar");

    returnObject.saySomethingElse = function() {
        alert("I like cheese");
    };

    return returnObject;
}

关于JavaScript 原型(prototype)继承困惑——我在这里错过了什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8157407/

相关文章:

javascript - 如何在 javascript 中为 Array 制作重复原型(prototype)方法的原型(prototype)

javascript - 关于 JavaScript 中的原型(prototype)概念

javascript - 如何在不链接到所有其他 Assets 的多个页面中捆绑 Webpack Assets ?

javascript 本地存储

javascript - 在 javascript 中添加静态资源的 URL 路径(在 Spring MVC 中)

javascript - 将javascript函数重写到node.js模块中

javascript - 属性应该出现在原型(prototype)上吗?

javascript - 是否可以确定使用 Object.create 创建的对象是否继承自 JavaScript 中的 Array?

javascript Riddle : 2 objects that seem identical with respect to constructor, 原型(prototype)和 __proto__ 链接,行为不同

javascript - 如何设置 D3 Zoom Packed Circle children 的颜色