<分区>
我是 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.");
}