JavaScript: instanceof 运算符意外结果

JavaScript: instanceof operator unexpected result

我最近为自己发现了原型,很乐意得到一些帮助来解决这个问题:

代码示例 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",我不知道我哪里错了,所以希望得到您的帮助,谢谢。

console.log( bmw instanceof Car.makeCar ); yields false

…因为 Car.makeCar 在其 .prototype 属性 上没有实例的原型。 instanceof 表达式等同于 Car.makeCar.prototype.isPrototypeOf(bmw)。要使其正常工作,您需要设置

Car.makeCar.prototype = Car.prototype;

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