javascript - Questions sur la chaîne de prototypes
PHP中文网
PHP中文网 2017-06-14 10:53:03
0
3
715
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.Lorsque my.toString() est appelé, quel est le chemin d'exécution du moteur JavaScript ?

PHP中文网
PHP中文网

认证0级讲师

répondre à tous(3)
滿天的星座
var my=new Triangle(5,10);//[1]

my.getArea();//25 [2]

my.toString();//"Triangle" [3]

[1] Créer un objet d'instance Triangle mon,

this.name='Triangle';
this.side为 5;
this.height为 10;

[2] Appelez la méthode getArea sur l'objet d'instance Triangle my
[3] Appelez la méthode toString sur l'objet d'instance Triangle my et constatez qu'elle n'existe pas sur l'objet actuel. Suivez la chaîne de prototypes pour trouver l'instance TwoDShape. S'il n'existe pas encore, allez dans l'instance Shape. Montez et cherchez l'objet, OK, trouvez-le.
Cet objet à ce moment est l'objet d'instance Triangle my, la valeur de l'attribut name dessus est Triangle et la sortie est

过去多啦不再A梦

1 : Comprenez d'abord la relation entre les types et les instances. La forme est un type (abstrait), var shape = new Shap(); la forme est une instance ;
2 : La question est trop vague, var shape = new Shap(); et Quelle est la relation entre le constructeur de var sh = Shape() => Le constructeur de shape est Shape.prototype.constructor; (Comment shape et sh peuvent-ils être liés ~)
3 : Pourquoi ne pas hériter directement ? Conçu comme ça ;

代言

Vous pouvez le voir en décomposant tout cela. Tout d'abord, regardez la logique de fonctionnement du nouveau TwoDShape.prototype = new Shape();Il fait trois choses

.
TwoDShape.prototype = {};
TwoDShape.prototype.__proto__ = Shape.prototype;
Shape.call(TwoDShape.prototype);

Même raison

Triangle.prototype = {};
Triangle.prototype.__proto__ = TwoDShape.prototype;
TwoDShape.call(Triangle.prototype);
var my = {};
my.__proto__ = Triangle.prototype;
Triangle.call(my, 5, 10);

Une fois exécutémy.toString()的时候从my自身成员开始找toString,没有就沿着__proto__往上找,最终在my.__proto__.__proto__(也就是TwoDShape.prototype)里找到了toString

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal