gpt4 book ai didi

javascript - "The"原型(prototype)是什么?

转载 作者:行者123 更新时间:2023-11-30 13:50:14 25 4
gpt4 key购买 nike

我正在努力思考原型(prototype),并且很想知道 原型(prototype)到底是什么。许多混淆源于不理解用于描述的元语言原型(prototype)。

这是我知道的:

当我们创建一个带有属性的命名构造函数时,该构造函数主体内的属性由该构造函数创建的对象实例继承。在这里,我从名为 Person 的构造函数创建了一个名为 person001 的实例。

function Person(firstName,lastName) {
this.firstName = firstName;
this.lastName = lastName
}
undefined
var person001 = new Person("John","Doe");

当我查看控制台中的对象实例并跟踪原型(prototype)链时,我在两个不同的地方找到了它。它是 dunder proto 对象的构造函数对象...

Person {firstName: "John", lastName: "Doe"}
firstName: "John"
lastName: "Doe"
__proto__:
constructor: ƒ Person(firstName,lastName)
__proto__: Object

以及同一构造函数对象中原型(prototype)对象的属性。

Person {firstName: "John", lastName: "Doe"}
firstName: "John"
lastName: "Doe"
__proto__:
constructor: ƒ Person(firstName,lastName)
arguments: null
caller: null
length: 2
name: "Person"
prototype:
constructor: ƒ Person(firstName,lastName)
__proto__: Object
__proto__: ƒ ()
[[FunctionLocation]]: script.js:76
[[Scopes]]: Scopes[1]
__proto__: Object

当我使用命名构造函数的 .prototype 属性添加属性时,我将该属性添加到原型(prototype)对象,而不是构造函数。添加的属性将位于原型(prototype)属性对象中的构造函数旁边。在这里,我使用构造函数 Person 的原型(prototype)属性添加了一个名为 age 的属性。

Person.prototype.age = 0;  

那么现在我已经添加了一个额外的属性,原型(prototype)到底是什么?

当我在对象实例 person001 上运行 Object.getPrototypeOf 方法时,它返回在我看来类似于原型(prototype)对象的内容。它有 3 个属性——构造函数、我添加的属性和隐式 dunder proto 对象。

Object.getPrototypeOf(person001);
{age: 0, constructor: ƒ}
age: 0
constructor: ƒ Person(firstName,lastName)
__proto__: Object

那么什么是原型(prototype)呢?是原型(prototype)对象{构造函数,附加属性}吗?还是只是原型(prototype)对象的构造函数?

预先感谢您的帮助。

最佳答案

当你执行 obj = new Person 时,游戏中有三个玩家:

  • 新创建的对象obj
  • 构造函数Person
  • 原型(prototype),一个特殊的隐藏对象,存储在Person.prototype

它们之间的关系如下:

obj.__proto__ === Person.prototype

Person.prototype.constructor === Person

插图:

function Person(firstName,lastName) {
this.firstName = firstName;
this.lastName = lastName
}

var person1 = new Person("John","Doe");
var person2 = new Person("Ann","Smith");

Person.prototype.age = 42;

enter image description here

关于javascript - "The"原型(prototype)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406799/

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