工厂功能的实例不是实例

时间:2017-06-23 00:24:16

标签: javascript

var Car = function(name){
    var name = name;

    function test(){
        console.log(name);
    }

    return{
        test
    }
}

var myCar = Car("a");
console.log(myCar instanceof Car); // false

为什么myCar instanceof Car返回false?我应该怎么做才能使用工厂函数返回true?

2 个答案:

答案 0 :(得分:0)

  

为什么myCar instanceof Car返回false?

myCar instanceof Car通过检查Car.prototype是否在myCar的原型链中来工作。

但由于Car返回了一个对象文字,Car.prototype不在该对象的原型链中,因此instanceof会返回false

  

我应该怎么做才能使用工厂函数返回true?

无。如果你希望instanceof工作,那么你必须使用该函数作为构造函数(即不要从函数返回任何内容并用new Car()调用它)。

我认为 factory 函数返回的实例不应被视为该函数的实例。

答案 1 :(得分:0)

创建对象时需要使用'new'关键字。我在下面添加了一些代码,其中包含一些修复,这意味着您不需要在父代中返回任何内容。

var Car = function(name){
  this.name = name;

  function test(){
      console.log(name);
  }
}
var myCar = new Car('hello');
console.log(myCar.name); // Now returns 'hello'
console.log(myCar instanceOf Car) // Returns true