JavaScript 原型(prototype)继承不起作用

标签 javascript prototypal-inheritance

<分区>

我是 JS 的初学者,一直在尝试让以下代码工作,但它没有给我预期的结果:

cat = function(name) {
    this.name = name;
    this.talk = function() {
        alert("Cat "+name+" says meow.");
    }
}
cat1 = new cat("George");
cat1.talk();

cat.prototype.changeName = function(name) {
    this.name = name;
}
cat2 = new cat("Felix");
cat2.changeName("Bill");
cat2.talk();

从我读到的有关 JS 的内容来看,从第二个警报中我应该得到 “Bill says meow”。但看起来该属性尚未设置,我仍然收到 "Felix says meow."

谁能指出错误?这真的很有帮助。提前致谢。

最佳答案

这不是继承问题,而是访问正确变量的问题。看看你的构造函数:

cat = function(name) {
    this.name = name;
    this.talk = function() {
        alert("Cat "+name+" says meow.");
    }
}

特别是 alert("Cat "+name+"says meow.");name始终 引用您传递给构造函数的参数。您应该改为访问 this.name,因为您的 changeName 方法将 this.name 设置为新值。

虽然没有理由在构造函数中定义此方法,但也将其添加到原型(prototype)中:

var Cat = function(name) {
    this.name = name;
}

Cat.prototype.talk = function() {
    alert("Cat " + this.name + " says meow.");
}

关于JavaScript 原型(prototype)继承不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14437471/

相关文章:

JavaScript:使用 Object.create 时获得的最大优势是什么

javascript - John Resig 的 Javascript 继承片段是否已弃用?

javascript - ES6 类中的构造函数和原型(prototype)中的构造函数之间的区别?

javascript - 我可以通过将所有相同类型的事件组合到一个处理程序中来提高 jQuery 性能吗?

javascript - 当状态对象发生变化时更新上下文

javascript - 显示一周中某天的消息

javascript - 为什么要在继承对象之外声明原型(prototype)函数?

javascript - JS 函数就这么简单,超链接语法

Javascript 在新选项卡中打开链接

JavaScript 原型(prototype)属性和原型(prototype)链接