Rumah > Soal Jawab > teks badan
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?
曾经蜡笔没有小新2017-05-19 10:17:29
Mula
var rect=new Rectangle(5,10);
Masukkan Rectangle, ini menunjuk ke objek baharu, dan memanggilnya objek1
Dilaksanakan ke
Polygon.call(this,2);
Masukkan Poligon atas nama objek1
function Polygon(sides){
if(this instanceof Polygon){
this.sides=sides;
this.getArea=function(){
return 0;
}
}else{
return new Polygon(sides);
}
}
Prototaip objek1 ialah Rectangle, jadi pergi ke else
return new Polygon(sides);
Masukkan Poligon sekali lagi, ini menunjuk ke objek baharu, dan memanggilnya objek2
Prototaip objek2 ialah Poligon, jadi objek2 diberi sisi
dan getArea
sides
和 getArea
回到 object1 的地盘, Polygon.call(this,2);
返回 object2 ,然后…… 然后丢掉了。
function Rectangle(wifth,height){
Polygon.call(this,2);
this.width=this.width;
this.height=height;
this.getArea=function(){
return this.width * this.height;
};
}
接着赐予 object1 undefined
的 width
、height
和 getArea
Polygon.call(this,2);
mengembalikan object2, dan kemudian... kemudian hilang.
function Rectangle(wifth,height){
Polygon.call(this,2);
this.width=width;
this.height=height;
this.getArea=function(){
return this.width * this.height;
};
}
Rectangle.prototype = Polygon.prototype
Kemudian berikan object1 undefined
's width
, height
dan getArea
. Akhirnya rect dapat object1 🎜 🎜Tambah penyelesaian dan biarkan Rectangle berkongsi prototaip Poligon🎜 rrreee
淡淡烟草味2017-05-19 10:17:29
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
習慣沉默2017-05-19 10:17:29
Dalam contoh anda, Poligon ialah item gangguan dan tidak mempunyai kesan pada Rectangle sama sekali.
Buang Polygon.call(this,2);
Tengok lagi, boleh faham sebabnya
巴扎黑2017-05-19 10:17:29
Cetak ini dan anda akan tahu sebabnya
this.sides=sides digantung pada Poligon
kembalikan Poligon(sisi);//ini bukan lagi Segiempat apabila dipanggil
function Polygon(sides){
if(this instanceof Polygon){
this.sides=sides;//sides
console.log(this)
this.getArea=function(){
return 0;
}
}else{
console.log('Polygon'+this)
return new Polygon(sides);
}
}
function Rectangle(wifth,height){
Polygon.call(this,2);
console.log(this)
this.width=this.width;
this.height=height;
this.getArea=function(){
return this.width * this.height;
};
}
var rect=new Rectangle(5,10);
alert(rect.sides);