我正在努力研究一个我以前认为我理解的主题 - 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/