2015-05-26 113 views
0

我正在測試ES 6中的類與io.js 2.xx 下面的例子我從Mozilla, 事情正在軌道上(OOp在JS), 在至少我們現在有直接繼承(在語法級別) '擴展'指令... 我提出的問題是成員屬性是在構造函數內定義的 這是至少一個語法問題... (已通過搜索該網站,並發現很少有關於此的信息) 將是一個更大的問題,當ESxx試圖有可見性指令的財產成員(在不久的將來,我猜)ES6類,成員屬性定義爲靜態/共享

無論如何,現在... 如何聲明共享/靜態屬性?

// example from Mozilla 
class Polygon 
    { 
    constructor(height, width) 
    { 
    this.name = 'Polygon'; 
    this.height = height; 
    this.width = width; 
    } 
    } 

class Square extends Polygon 
    { 
    constructor(length) 
    { 
    super(length, length); 
    this.name = 'Square'; 
    } 
    } 
+1

接下來可能會發生什麼:https://gist.github.com/jeffmo/054df782c05639da2adb –

+0

是的......這似乎是要走的路......希望它很快成爲現實......但仍然有一些功能仍然丟失...... – ZEE

回答

1

,您仍然可以只使用舊的語法,添加屬性構造函數(靜態屬性)或原型(預定義的實例屬性)

class Foo { 
    constructor() { 

    } 
} 
Foo.bar = 'bar'; 
Foo.prototype.baz = 'baz'; 

console.log(Foo.bar) // 'bar' 
console.log(new Foo().baz) // 'baz' 

,它會工作。只看example on babel-repl

+0

罰款......但是這個進化過程中的干擾是抓住OOP的最佳實踐......就像邏輯語法......封裝...... 也許在未來的泛型中,運算符重載等 – ZEE

+1

您可以使用實驗性的babel功能 - [es7.classProperties](https://gist.github.com/jeffmo/054df782c05639da2adb)。這裏是[示例的修改版本](http://babeljs.io/repl/#?experimental=true&evaluate=true&loose=false&spec=false&code=class%20Foo%20%7B%0A%20%20%0A%20%20baz %20%3D%20'baz'%3B%0A%20%20%0A%20%20constructor()%20%7B%0A%20%20%20%20%0A%20%20%7D%0A% 20%20%0A%20%20static%20bar的%20%3D%20'bar'%3B%0A%7D%0A%0Aconsole.log(Foo.bar)%0Aconsole.log(新%20Foo()。巴茲) )。但請注意,它不會很快實施 –

1

您可以干將定義靜態或原型屬性:

class Foo { 
    static get bar() { 
    return 42; 
    } 

    get bar() { 
    return 21; 
    } 
} 

它的效果並不理想,但它的作品。