我正在通过遇到的一个问题来试验 Javascript 继承的几个方面:
创建预订飞机座位或酒店房间的预订系统。它对飞机或酒店的特定部分收取不同的费用。例如,头等舱的费用将高于教练。酒店房间有顶层套房,价格更高。跟踪房间何时可用并可以安排。
我正在处理酒店房间问题。
我决定使用一个房间基础对象,它有一个名为“duration”的数据成员,用于跟踪房间预订的天数,以及两种方法:book 和 checkout。
我有一个继承自 SingleRoom 的派生对象“SingleRoom”。
代码如下:
function Room(duration){
this.duration = duration;
}
Room.prototype.book = ()=>{
if (this.prototype.count > 0){
this.prototype.count -= 1;
return true;
}
else {
return false;
}
}
Room.prototype.checkOut = ()=>{
this.prototype.count += 1;
console.log("Room checked out");
}
function SingleRoom(duration){
this.price = 1000;
}
SingleRoom.prototype = new Room();
SingleRoom.prototype.constructor = SingleRoom;
SingleRoom.prototype.count = 3;
var sr1 = new SingleRoom(2);
if(sr1.book() === false){
console.log("Could not book room");
}
我在“this.prototype.count”处收到以下错误:无法读取未定义的属性计数
知道问题出在哪里吗?
谢谢!
最佳答案
您应该只在构造函数上使用 prototype
属性。这是正确的:
SingleRoom.prototype = new Room();
SingleRoom.prototype.constructor = SingleRoom;
SingleRoom.prototype.count = 3;
但是你不应该在单个对象上使用它。当您访问未在直接对象上定义的属性时,会自动搜索原型(prototype)链。将 this.prototype.count
更改为 this.count
即可正常工作。
关于Javascript原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37489020/