gpt4 book ai didi

javascript - Function 的 __proto__ 是什么?

转载 作者:行者123 更新时间:2023-12-02 22:53:18 26 4
gpt4 key购买 nike

我看到了这个漂亮的图表,并且我在 Chrome 浏览器中做了一些测试,但我不知道如何解释这一点:

> Function.prototype
function Empty() {}
> Function.__proto__
function Empty() {}
> typeof(Empty)
"undefined"

什么是function Empty() {},以及为什么Function.prototype是一个函数而不是对象就像Object.prototype

从上图中,JavaScript 中的所有内容似乎都是从 Object.prototype 开始的,我的说法正确吗?

最佳答案

首先,function Empty() {} 表示形式为 V8东西。

在 V8 中,Function.prototype 对象将 “Empty” 作为 Function.prototype.name 属性的值,因此我猜测您可能正在使用 Chrome 的开发者控制台,它以这种方式显示函数的名称。

函数对象的 name 属性是非标准(不是 ECMA-262 的一部分),这就是我们看到实现之间存在差异的原因。

现在,Function.prototype 是一个函数,它始终返回 undefined 并且可以接受任意数量的参数,但为什么呢?也许只是为了保持一致性,每个内置构造函数的原型(prototype)都是这样的,Number.prototype是一个Number对象,Array.prototype是一个Array 对象,RegExp.prototype 是一个 RegExp 对象,依此类推...

唯一的区别(例如,任何函数对象和Function.prototype之间)是显然Function.prototype继承自Object.prototype >.

it seems everything in javascript start from Object.prototype, am I right about that?

嗯,你是对的 Object.prototype 是大多数对象原型(prototype)链的最后一个对象,但在 ECMAScript 5 中,你甚至可以创建不继承任何对象的对象(只是就像Object.prototype一样),并形成另一个继承链,例如:

var parent = Object.create(null),
child = Object.create(parent);

Object.prototype.isPrototypeOf(parent); // false

Object.getPrototypeOf(parent); // null
Object.getPrototypeOf(Object.prototype); // null

关于javascript - Function 的 __proto__ 是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7688902/

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