2016-04-09 10 views
0

私は次があるとします。ES6クラス:スーパー方法でサブクラスの適切な名前を取得します

class ThingWithWheels { 
    constructor(numWheels) { 
     this.numWheels = numWheels 
    } 
    toString() { 
     return this.constructor.name; 
    } 
} 
class Car extends ThingWithWheels { 
    constructor(color) { 
     super(4); 
     this.color = color; 
    } 
    toString() { 
     return `${this.color} ${super.toString()}`; 
    } 
} 

これはかなり標準オブジェクト指向プログラミングです。しかし、NodeJS v5.6.0では赤い車を作り、toString()と呼ぶと、ではなく、Red Carとなります。スーパーメソッドを呼び出すと、としてthisが扱われ、Carではありません。

  1. これはなぜですか?
  2. スーパーメソッドが名前を正しく取得する方法はありますか?
+0

これらのうちどれを他のものから継承していますか?あなたはいかなる継承も表示しません。 – jfriend00

+0

あなたはクラスカーがThingWithWheelsを拡張していることを意味しています。ここで読んでください。https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes – JordanHendrix

+0

「extend 「ThingWithWheels」動作を変更しません。 –

答えて

0

私はnode.js 5.10.1でこれを試してみましたが、 "Red Car"をくれたので、5.6のバグだったかもしれません。

+0

...私も... 私は何かを見落とさなければならないと思います... –

+0

誤ってサブクラスの代わりにスーパークラスのインスタンスを作ると間違った名前になってしまいます。 * shame intensifies * –

関連する問題