javascript - Soalan mengenai rantai prototaip
PHP中文网
PHP中文网 2017-06-14 10:53:03
0
3
703
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中文网

认证0级讲师

membalas semua(3)
滿天的星座
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梦

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

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan