Javascript継承(三)


子の対象から親を訪問する.
古典的なオブジェクト指向言語には文法があり、サブクラスでは親類にアクセスできます.実は直接に親類の引用を呼び出すことができます.ある時、私達は子供に方法を書いて、父の種類の方法を使う必要がある時、この特性は特に役に立ちました.多くのアプリケーションでは、サブクラスは親と同じ方法を作成し、この方法で親の方法を呼び出します.Javascriptにはこのような文法はありません.しかし、この機能は簡単に完成できます.次のコードを見せてください.
function Shape(){}
Shape.prototype.name = 'shape';
Shape.prototype.toString = function(){
var result = [];
if (this.constructor.uber) {
result[result.length] = this.constructor.uber.toString();
}
result[result.length] = this.name;
return result.join(', ');
};

function TwoDShape(){}
var F = function(){};
F.prototype = Shape.prototype;
TwoDShape.prototype = new F();
TwoDShape.prototype.constructor = TwoDShape;
TwoDShape.uber = Shape.prototype;
TwoDShape.prototype.name = '2D shape';

function Triangle(side, height) {
this.side = side;
this.height = height;
}
var F = function(){};
F.prototype = TwoDShape.prototype;
Triangle.prototype = new F();
Triangle.prototype.constructor = Triangle;
Triangle.uber = TwoDShape.prototype;
Triangle.prototype.name = 'Triangle';
Triangle.prototype.getArea = function(){return this.side * this.height / 2;}
 新しい違いは
1.uberの属性で父のプロトタイプを指しました.
2.toString方法を書き換える.
前の例では、String方法はthis.nameに戻りましたが、この例ではまず、this.com stuctorが存在するかどうかを確認し、存在するとtostring.this.com stuctorを呼び出します.this.com nstructor.uberは父のprototypeを指しています.結果として、Triangleの例のtoString方法を呼び出すと、すべてのプロトtypeチェーン上のtoString方法が呼び出されます.
var my = new Triangle(5, 10);
my.toString();//"shape, 2D shape, Triangle"
バイバをいわゆる父ではなく、他の言語に向けたsuperやbaseのような意味で使わないでください.