0

継承とプロトタイピングを使用して Javascript で OOP を使用しようとしています。私の JSfiddel http://jsfiddle.net/Charissima/daaUK/をご覧ください。最後の値が問題です、ありがとう。関数 drive with raceCar が、putTotalDistance ごとに設定された totalDistance を取得しない理由がわかりません。

        function Car () {
            var that = this;

            this.totalDistance = 0;

            this.putTotalDistance = function(distance) {
                that.totalDistance = distance;
            };

            this.getTotalDistance = function() {
                return this.totalDistance;      
            };  

            this.drive = function(distance) {
                that.totalDistance += distance;     
                return that.totalDistance;
            };

            this.privateFunc = function() { 
                return 'car ' + this.totalDistance;
            };
        };


        function RaceCar (initialDistance) {
            var that = this;

            this.prototype = new Car();
            this.drive = function(distance) {
                return that.prototype.drive(2*distance);
            };

            this.privateFunc = function() {
                return 'raceCar ' + that.getTotalDistance();
            };
        };


        RaceCar.prototype = new Car();

        car = new Car;
        raceCar = new RaceCar;          


        car.putTotalDistance(200);
        alert('car totalDistance = ' + car.drive(10) + ' - ok');

        raceCar.putTotalDistance(200);
        alert('raceCar totalDistance before drive = ' + raceCar.getTotalDistance() + ' - ok');
        alert('raceCar totalDistance after drive = ' + raceCar.drive(10) + ' Why not 220?');                
4

3 に答える 3

0

まずvar that = this;不要です。オブジェクト コンテキストでthisは、常にインスタンスを参照します。

また、独自のコンストラクター内でオブジェクトのプロトタイプを設定したくありません。

クラスのプロトタイプにアクセスしたい場合は、インスタンスを介してアクセスしないでください。

更新フィドル

function RaceCar (initialDistance) {
    //var that = this;
    //this.prototype = new Car();

    this.drive = function(distance) {
        return RaceCar.prototype.drive(2*distance);
    };          
};

// This correctly sets the prototype
RaceCar.prototype = new Car();
于 2013-10-18T08:13:46.973 に答える