function Person(){}
person1 = new Person()
console.log(person1.constructor === Person) //true: makes sense
console.log(Person.prototype.constructor === Person) //true: Why
console.log(Person.prototype instanceof Person) //false: Why
在上面的代码片段中,person1
对象是使用Person
构造函数创建的。 person1
对象的构造函数是Person
,这对我来说很有意义。
但是在创建Person
时也创建了Person.prototype
。
多年以来,我一直认为Person.prototype
的构造者是Object
。但是今天我发现它实际上是Person
本身。
老实说,我无法消化这个启示。
为什么某个功能的Prototype
必须是其子级?其背后的想法是什么?
另外,很奇怪:Person.prototype instanceof Person === false
。
请解释。
答案 0 :(得分:1)
Javascript定义了函数原型属性上的默认对象将具有构造函数属性,并将其引用回该函数。
您为什么看到
Person.prototype.constructor === Person // true
现在
Person.prototype instanceof Person
返回false ,因为Person.prototype
不是Person的实例,而是为Person本身定义的对象。原型对象具有两个属性constructor
,它们分别指向上述的Person对象和__proto__
。
但是,如果您选中
person1 instanceof Person
它将返回您为真
答案 1 :(得分:0)
请注意,person1
本身没有.constructor
属性,它是从Person.prototype
继承的。这就是Person.prototype.constructor = Person
的全部原因-不是因为原型对象是通过Person
构造的(不是),而是因为person1
继承这个值是有意义的。