56252

[code]

    let Car = function(num, gas) {
          this.num = num;
          this.gas = gas;
    };
    
    Car.prototype = {
           getInfo: function() {
                  return '車のナンバーは' + this.num + 'です。ガソリン量は' + this.gas + 'です。';
           }
    };
    
    let RacingCar = function(course) {
          Car.call(this, 2345, 30);
          this.course = course;
    };
    
    RacingCar.prototype = new Car();
    
    RacingCar.prototype = {
            getCourse: function() {
                     return 'コースは' + this.course + 'です。';
            }
    };
    
    let rccar = new RacingCar(5);
    console.log(rccar.getInfo());
    console.log(rccar.getCourse());
    
[/code]

上記のコードを実行すると、

> TypeError: rccar.getInfo is not a function

とエラーが出るのですが、何故プロトタイプチェーンが効かないのでしょうか？


CC BY-SA 4.0
2019-06-30T08:18:12.487
56251
2019-06-30T09:01:33.823
2019-06-30T08:22:26.503
question
javascript
JavaScriptのプロトタイプチェーンについて


`RacingCar.prototype` に対して **`new Car` を代入した直後で `getCourse`
メソッドを持つオブジェクトを代入している**ためです。

[code]

    {
      let Car = function(num, gas) {
        this.num = num;
        this.gas = gas;
      };
    
      Car.prototype = {
        getInfo: function() {
          return '車のナンバーは' + this.num + 'です。ガソリン量は' + this.gas + 'です。';
        }
      };
    
      let RacingCar = function(course) {
        Car.call(this, 2345, 30);
        this.course = course;
      };
    
      RacingCar.prototype = new Car();
    
      RacingCar.prototype.getCourse = function() { // 修正
        return 'コースは' + this.course + 'です。';
      };
    
      let rccar = new RacingCar(5);
      console.log(rccar.getInfo()); //=> 車のナンバーは2345です。ガソリン量は30です。
      console.log(rccar.getCourse()); //=> コースは5です。
    }
    
[/code]


CC BY-SA 4.0
2019-06-30T08:34:09.577
56252
2019-06-30T08:34:09.577
32986
56251
answer