問題:打字稿類:靜態和繼承
- 是我觀察了打字稿的預期行爲的行爲?
- 我正在觀察ECMAScript 6的預期行爲?
- 有沒有一種簡單的方法來回顧繼承層次來處理每個級別的'myStatic'數組?我怎麼知道何時停止?
描述:當使用TypeScript時,派生類和靜態屬性似乎有一些有趣的行爲。
class MyBase {
static myStatic = [];
}
class MyDerived extends MyBase {}
MyBase.myStatic = ['one', 'two', 'three']
class MyDerived2 extends MyBase {}
document.body.innerHTML += "<b>MyDerived.myStatic:</b> " + JSON.stringify(MyDerived.myStatic) + "<br/>";
document.body.innerHTML += "<b>MyDerived2.myStatic:</b> " + JSON.stringify(MyDerived2.myStatic) + "<br/>";
這是結果:
MyDerived.myStatic: []
MyDerived2.myStatic: ["one","two","three"]
編輯:添加例子說明打字稿和ECMA腳本6.注意之間不同的行爲:ECMA腳本不支持靜態屬性,所以這些示例使用靜態方法。
打字稿代碼:
class MyBase {
static myStatic() { return []; }
}
class MyDerived extends MyBase {}
MyBase.myStatic =() => { return ['one', 'two', 'three']; }
class MyDerived2 extends MyBase {}
document.body.innerHTML += "<b>MyDerived.myStatic:</b> " + JSON.stringify(MyDerived.myStatic()) + "<br/>";
document.body.innerHTML += "<b>MyDerived2.myStatic:</b> " + JSON.stringify(MyDerived2.myStatic()) + "<br/>";
打字稿結果:
MyDerived.myStatic: []
MyDerived2.myStatic: ["one","two","three"]
ECMA腳本6代碼:ES6 Fiddle
class MyBase {
static myStatic() { return []; }
}
class MyDerived extends MyBase {}
MyBase.myStatic =() => { return ['one', 'two', 'three']; };
class MyDerived2 extends MyBase {}
console.log("MyDerived.myStatic: " + JSON.stringify(MyDerived.myStatic()));
console.log("MyDerived2.myStatic: " + JSON.stringify(MyDerived2.myStatic()));
ECMA腳本6個結果
MyDerived.myStatic: ["one","two","three"]
MyDerived2.myStatic: ["one","two","three"]