如何创建javascript函数对象并获取其内部属性

lch*_*lch 1 javascript

https://danmartensen.svbtle.com/the-anatomy-of-a-javascript-function#creating-function-instances_3

我试图理解这篇关于如何创建javascript函数对象的文章.它说:

The new instance object is implicitly assigned many internal properties, one being the [[prototype]] property. The Function constructor’s prototype property referencing it’s prototype object is copied into this new object’s [[prototype]] property

基于上面的陈述我写了这段代码:

function Person(){

}

console.dir(Function.prototype);
console.dir(Person.prototype);
Run Code Online (Sandbox Code Playgroud)

根据语句将Function.prototype分配给新创建的函数对象的prototpe(在本例中为Person.prototype).我打印了他们两个.内容看起来不同.

有人可以解释我的理解错误的地方.顺便说一下,我也看了一下Ecmascript的规格,它也有同样的说法

在此输入图像描述

Ber*_*rgi 5

根据声明,Function.prototype分配给新创建的函数对象的原型(Person.prototype在本例中)

不会.文本讨论内部属性,例如[[prototype]].您无法将其作为普通属性访问,您可以使用它来访问它Object.getPrototypeOf.事实上,

Object.getPrototypeOf(Person) === Function.prototype // true
Run Code Online (Sandbox Code Playgroud)

.prototype物业是另一回事.它确实在函数对象的实例化时创建,但它确实填充了一个继承自(has [[prototype]])Object.prototype并包含.constructor指向函数的属性的对象.该对象将成为使用创建的实例的[[prototype]] new Person.