gpt4 book ai didi

javascript - 为什么函数的原型(prototype)必须是它的子函数?

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:23:51 25 4
gpt4 key购买 nike

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

请解释。

最佳答案

Javascript 定义函数原型(prototype)属性上的默认对象将具有构造函数属性,并且它将返回引用该函数。

这就是你看到的原因

Person.prototype.constructor === Person // true

现在,

Person.prototype instanceof Person

返回 false 因为 Person.prototype 不是 Person 的实例,而是为 Person 本身定义的对象。 prototype 对象有两个属性 constructor ,它指向上面指定的 Person 对象本身和 __proto__

但是如果你检查

person1 instanceof Person 

它会返回 true

关于javascript - 为什么函数的原型(prototype)必须是它的子函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54948575/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com