Rumah > Soal Jawab > teks badan
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?
滿天的星座2017-06-14 10:55:03
var my=new Triangle(5,10);//[1]
my.getArea();//25 [2]
my.toString();//"Triangle" [3]
[1]. Cipta objek contoh Segitiga saya,
this.name='Triangle';
this.side为 5;
this.height为 10;
[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
过去多啦不再A梦2017-06-14 10:55:03
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;
代言2017-06-14 10:55:03
Anda boleh melihatnya dengan memecahkan semuanya Pertama, lihat logik operasi baharu TwoDShape.prototype = new Shape();
Ia melakukan tiga perkara
TwoDShape.prototype = {};
TwoDShape.prototype.__proto__ = Shape.prototype;
Shape.call(TwoDShape.prototype);
Sebab yang sama
Triangle.prototype = {};
Triangle.prototype.__proto__ = TwoDShape.prototype;
TwoDShape.call(Triangle.prototype);
var my = {};
my.__proto__ = Triangle.prototype;
Triangle.call(my, 5, 10);
Apabila dilaksanakanmy.toString()
的时候从my
自身成员开始找toString
,没有就沿着__proto__
往上找,最终在my.__proto__.__proto__
(也就是TwoDShape.prototype
)里找到了toString