3 votes

Pourquoi instanceof renvoie-t-il false en JavaScript ?

Dans le code suivant, pourquoi instanceof renvoie-t-il false pour Shape et Rectangle ? De même, pourquoi les propriétés propres de rec incluent-elles les valeurs x et y de la superclasse ?

    function Shape(x, y) {
        this.x=x;
        this.y=y;
    }
    Shape.prototype.move = function (x, y) {
        this.x += x;
        this.y += y;
        console.log("x = " + this.x + " y = " + this.y);
    };
    function Rectangle(x, y, w, h) {
        Shape.call(this, x, y);
        this.w = w;
        this.h = h;
    }
    Rectangle.prototype = Object.create(Shape.prototype);
    Rectangle.prototype.area = function() {
        return this.w * this.h;
    };
    var rec = new Rectangle(0,0,10,10);
    console.log("instanceof = " + rec instanceof Shape);
    console.log("instanceof = " + rec instanceof Rectangle);
    rec.move(2,3);
    console.log("area = " + rec.area());
    console.log(Object.getOwnPropertyNames(rec));

9voto

Jonathan Lonowski Points 45253

Parce que + est évalué avant instanceof . Donc vous demandez si :

"instanceof = " + rec

...a String est un instanceof vos constructeurs, ce qui ne sera pas le cas.

Soit ajouter des parenthèses pour forcer l'ordre :

console.log("instanceof = " + (rec instanceof Shape));

Ou, puisque console.log accepte un nombre quelconque d'arguments, passez-le comme le sien :

console.log("instanceof = ", rec instanceof Shape);

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X