2017-07-13 77 views
1

)在下面我試圖創建一個Object的子類,它的行爲就像使用'new'創建實例一樣。我當然會添加更多的方法到我的子類,但下面顯示了我從構造函數中調用超構造函數的問題。在JavaScript ES6類的構造函數中調用超類(它擴展了對象

爲什麼我的類Sub的一個實例沒有字段'x'就像一個普通的Object在用'new'創建時使用相同的參數一樣?

class Sub extends Object 
{ constructor (anObject) 
    { super(anObject); 
    } 
} 
var ob = new Object ({x: 123}); 
var sub = new Sub ({x: 123}); 
console.log(ob.x); // -> 123 
console.log(sub.x); // -> undefined 

回答

3

基本上,因爲Object是特殊的,並通過不同的規則玩,因爲它幾乎是在JavaScript中最基礎的構建。

而不是擴展Object,只需創建它沒有超類(因爲它將是一個對象),並使用Object.assign(this, obj)將所有屬性分配給新創建的對象。

class Sub { 
 
    constructor(obj) { 
 
    Object.assign(this, obj); 
 
    } 
 
} 
 

 
console.log(new Object({a: 1})); 
 
console.log(new Sub({a: 1}));

+0

我同意「的對象是特殊的」,但我認爲它應該是在其他類特殊的,如果他們沒有加入自己應該繼承其行爲。我仍然想知道這是否是實現中的一個錯誤,發生在Node v8.0.0上。有沒有人知道該規範是否在某個地方說這是它應該如何工作?謝謝 –

相關問題