我創建了這些對象及其方法。Javascript OOP繼承
var Door = function(no = 10) {
this.number = isNaN(no) ? 10 : no;
}
var Room = function(door) {
this.door = door instanceof Door ? door : new Door();
this.name = 'Room';
}
function MyRoom(){
this.name = 'MyRoom';
}
MyRoom.prototype = new Room();
function HerRoom() {
this.name = 'HerRoom';
}
HerRoom.prototype = new Room();
var $myDoor = new Door(10);
var $herDoor = new Door(5);
var $myRoom = new MyRoom($myDoor);
var $herRoom = new HerRoom($herDoor);
console.log($myDoor, $myRoom.door);
// $myDoor.number is 10
// $myRoom.door.number is 10
console.log($herDoor, $herRoom.door);
// $herDoor.number is 5
// $herRoom.door.number is 10
我不知道我做錯了什麼,讓$myDoor == $myRoom.door
,但,$herDoor != $herRoom.door
。任何人都可以幫助我注意我的錯誤在哪裏?
更新:
因爲,我創建
我期待那$herRoom.door.number
等於$herDoor.number
。因爲,
$herDoor instanceof Door // true;
你doornumbers永遠是10 - 看看@ gurvinder372 – messerbill
你永遠叫你的超級構造函數的答案,也不'HerRoom'也不'MyRoom'取一個論點。相反,你依靠[錯誤初始化的原型](https://stackoverflow.com/questions/12592913/what-is-the-reason-to-use-the-new-keyword-here)擁有該屬性。 – Bergi
看起來好像在創建HerRoom/MyRoom的新實例時,它不會對您傳入的門執行任何操作。它總是構造一個門的新實例,用作其原型的默認值爲10.嘗試將兩個值都更改爲20,例如$ myRoom.number = 10 – Magrangs