3

在下面的代码中,为什么 instanceof 对 Shape 和 Rectangle 都返回 false?另外,为什么 rec 的自身属性同时包含超类中的 x 和 y ?

    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));
4

1 回答 1

9

因为+是之前评估过instanceof的。所以你问是否:

"instanceof = " + rec

...a String,是instanceof你的构造函数,它不会是。

添加括号以强制顺序:

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

或者,由于console.log接受任意数量的参数,因此将其作为自己的参数传递:

console.log("instanceof = ", rec instanceof Shape);
于 2012-11-10T23:00:15.083 回答