- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力思考原型(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
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;
关于javascript - "The"原型(prototype)是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58406799/
我是一名优秀的程序员,十分优秀!