JavaScript:instanceof运算符意外结果

时间:2016-08-31 23:06:26

标签: javascript prototype instanceof

我最近为自己发现了原型,很乐意帮助找出问题:

代码示例1:

    "use strict";

    var Car = function(loc) {
        var obj = Object.create(Car.prototype);
        obj.loc = loc;
        return obj;
    };

    Car.prototype.move = function() {
            this.loc++;
            return this.loc;
    };

    var bmw = Car(6);

    console.log( bmw instanceof Car );

代码示例2:

    "use strict";

    var Car = {
        "makeCar": function(loc) {
            var obj = Object.create(Car.prototype);
            obj.loc = loc;
            return obj;
        },
        "prototype": {
            "move": function() {
                this.loc++;
                return this.loc;
            }
        }
    };

    var bmw = Car.makeCar(6);

    console.log( bmw instanceof Car.makeCar );

我写了示例2,因为我想在对象本身内保留Car对象的方法。我不确定它是否可以完成,但它到目前为止仍然有效,除了“instanceof”运算符。

在第一个例子中,它会记录“true”,但在第二个例子中它会记录“false”,我不知道我哪里错了,所以依靠你的帮助,谢谢你。

1 个答案:

答案 0 :(得分:1)

  

.on("click", ".mt-help-more-content", function(e) { $(this).prev('.description').toggle(); } 收益console.log( bmw instanceof Car.makeCar );

...因为false没有实例' Car.makeCar属性上的原型。 .prototype表达式等同于instanceof。为了使其有效,您需要设置

Car.makeCar.prototype.isPrototypeOf(bmw)

但这很奇怪。只需保持标准模式。如果要将结构单元中的方法与构造函数一起声明,请将所有内容包装在IEFE中like here或仅使用ES6类