function Polygon(sides){
if(this instanceof Polygon){
this.sides=sides;
this.getArea=function(){
return 0;
}
}else{
return new Polygon(sides);
}
}
function Rectangle(wifth,height){
Polygon.call(this,2);
this.width=this.width;
this.height=height;
this.getArea=function(){
return this.width * this.height;
};
}
var rect=new Rectangle(5,10);
alert(rect.sides); //undefined
Kod ini ialah contoh P598-599 dalam JS Height 3.
Apa yang saya ingin tanya ialah mengapa amaran tidak ditentukan?
Mula
Masukkan Rectangle, ini menunjuk ke objek baharu, dan memanggilnya objek1
Dilaksanakan ke
Masukkan Poligon atas nama objek1
Prototaipobjek1 ialah Rectangle, jadi pergi ke else
Masukkan Poligon sekali lagi, ini menunjuk ke objek baharu, dan memanggilnya objek2
Prototaip objek2 ialah Poligon, jadi objek2 diberi
sisi
dangetArea
sides
和getArea
回到 object1 的地盘,
Polygon.call(this,2);
返回 object2 ,然后…… 然后丢掉了。接着赐予 object1
Kembali ke wilayah object1,undefined
的width
、height
和getArea
Polygon.call(this,2);
mengembalikan object2, dan kemudian... kemudian hilang.undefined
'swidth
,height
dangetArea
.Dalam Rectangle, Poligon ini menunjuk kepada Rectangle ini Apabila Rectangle digunakan sebagai pembina, ini merujuk kepada contoh Rectangle, iaitu, tepat dalam contoh ini, dan prototaip Poligon bukan pada rantai prototaip bagi. rect. , iaitu, instanceof Polygon ini adalah palsu, jadi Polygon(sides) baru dalam else digunakan, dan sides tidak dilampirkan pada instance, jadi atribut sides tidak wujud pada instance rect.
Ada juga segi empat tepat(lebar,tinggi), lebar tersalah tulis
Dalam contoh anda, Poligon ialah item gangguan dan tidak mempunyai kesan pada Rectangle sama sekali.
Buang
Polygon.call(this,2);
Tengok lagi, boleh faham sebabnyaCetak ini dan anda akan tahu sebabnya
this.sides=sides digantung pada Poligon
kembalikan Poligon(sisi);//ini bukan lagi Segiempat apabila dipanggil