cari

Rumah  >  Soal Jawab  >  teks badan

javascript - Soalan mengenai rantai prototaip

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?

PHP中文网PHP中文网2746 hari yang lalu729

membalas semua(3)saya akan balas

  • 滿天的星座

    滿天的星座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

    balas
    0
  • 过去多啦不再A梦

    过去多啦不再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;

    balas
    0
  • 代言

    代言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

    balas
    0
  • Batalbalas