function Shape(){
this.name='Shape';
this.toString=function(){
return this.name;
};
}
function TwoDShape(){
this.name='2D shape';
}
function Triangle(side,height){
this.name='Triangle';
this.side=side;
this.height=height;
this.getArea=function(){
return this.side*this.height/2;
};
}
TwoDShape.prototype=new Shape();
Triangle.prototype=new TwoDShape();
var my=new Triangle(5,10);
my.getArea();//25
my.toString();//"Triangle"
1.Apabila my.toString() dipanggil, apakah laluan pelaksanaan enjin JavaScript?
[1]. Cipta objek contoh Segitiga saya,
[2] Panggil kaedah getArea pada objek instance Triangle my
[3] Panggil kaedah toString pada objek instance Triangle my, dan dapatkan bahawa ia tidak wujud pada objek semasa Ikut rantai prototaip untuk mencari contoh TwoDShape objek. Jika ia belum wujud, pergi ke contoh Shape dan cari objek, OK, cari.
Objek ini pada masa ini ialah objek contoh Segitiga my, nilai atribut nama padanya ialah Segitiga, dan outputnya ialah
1: Mula-mula fahami hubungan antara jenis dan kejadian Shape ialah jenis (abstrak), var shape = new Shap(); dan Apakah hubungan antara pembina var sh = Shape() => Pembina bentuk ialah Shape.prototype.constructor; (Bagaimana bentuk dan sh boleh dikaitkan~)
3: Mengapa tidak diwarisi secara langsung? Direka seperti ini;
Anda boleh melihatnya dengan memecahkan semuanya Pertama, lihat logik operasi baharu
TwoDShape.prototype = new Shape();
Ia melakukan tiga perkaraSebab yang sama
Apabila dilaksanakan
my.toString()
的时候从my
自身成员开始找toString
,没有就沿着__proto__
往上找,最终在my.__proto__.__proto__
(也就是TwoDShape.prototype
)里找到了toString