2

オブジェクトを拡張しようとしていますが、最初のメソッドをオーバーライドせずに変更したいと思います。これは明確ではないと思うので、ここに例を示します。

var object1 = {
    whatever : function(){
        console.log('first object method');
    }
}

var object2 = {
    whatever : function(){
        console.log('second object method');
    }
}

var object = $.extend(true, object1, object2);

object.whatever();

この例はを出力second object methodしますが、私が欲しいのはそれを出力しfirst object methodsecond object method

これを行う方法はありますか?

4

1 に答える 1

3

Javascriptはプロトタイプの継承を使用するため、object2にobject1のプロパティとメソッドを継承させることができます。

object2.prototype=object1;

これは、object2がobject1のすべてのプロパティとメソッドを継承し、上書きされたメソッドにアクセスできることを意味します。object2.prototype.method()

したがって、object2のスコープから呼び出す場合とparent::whatever();同じです。this.prototype.whatever();


var object1 = {
    whatever : function(){
        console.log('first object method');
    }
}

var object2 = {
    whatever : function(){
        console.log('second object method');
        this.prototype.whatever(); // Equivalent to parent::whatever(); 
    }
}

object2.prototype=object1; // Makes object2 inherit object1's properties and methods

object2.whatever(); // "second object method" "first object method"
于 2012-06-06T22:23:44.357 に答える