函数和对象原型 [duplicate]

Function & object prototype [duplicate]

提问人:Abolfazl Soltani 提问时间:9/5/2023 更新时间:9/5/2023 访问量:29

问:

在本问题中,Person 具有构造函数,pesron1 具有由 Person 创建的实例或对象。 嗨,大家好,为什么这段代码返回false Person.prototype === Object.getPrototypeOf(Person)以及为什么 这段代码有真正的 Person.prototype === Object.getPrototypeOf(person1)?

应该返回 true!!

JavaScript 对象 OOP 构造函数

评论

0赞 Jaromanda X 9/5/2023
Person 是一个函数,但 Person 的实例是......井。。。Person 的实例

答:

0赞 Qazi Mateen 9/5/2023 #1

您的代码中似乎存在误解。让我们分解每个语句,看看发生了什么:

  1. Person.prototype === Object.getPrototypeOf(Person):

此语句与函数本身的原型进行比较。换言之,您正在将构造函数的 prototype 属性与 的原型进行比较。由于 和 都指向同一个对象(这是使用 创建的实例的原型对象),因此此语句应返回 。Person.prototypePersonPersonPersonPerson.prototypeObject.getPrototypeOf(Person)new Person()true

  1. Person.prototype === Object.getPrototypeOf(person1):

此语句与使用构造函数创建的对象的原型进行比较。假设是用 正确创建的,此语句也应该返回,因为继承自 。Person.prototypeperson1Personperson1new Person()trueperson1Person.prototype

这里有一个简单的例子来说明这一点:

function Person(name) {
  this.name = name;
}

const person1 = new Person("John");

console.log(Person.prototype === Object.getPrototypeOf(Person)); // Should return true
console.log(Person.prototype === Object.getPrototypeOf(person1)); // Should return true

如果代码返回第一个语句,则代码中的其他位置可能会发生异常或不正确的情况。请确保在创建 的实例时使用关键字,并确保代码中没有对代码或代码中的其他位置进行其他修改或赋值。falsenewPersonPerson.prototypeObject.getPrototypeOf(Person)

评论

1赞 VLAZ 9/5/2023
"由于 Person.prototype 和 Object.getPrototypeOf(Person) 都指向同一个对象“,因此它们不会。从来没有,永远不会。“如果你的代码在第一个语句中返回 false,那么代码中的其他地方可能会发生一些异常或不正确的事情。” 正是该表达式的正确结果。构造函数的属性和构造函数的原型不是一回事。falseprototype