gpt4 book ai didi

Javascript __proto__、对象和函数

转载 作者:行者123 更新时间:2023-11-30 16:35:05 26 4
gpt4 key购买 nike

我正在重新从头开始学习 JavaScript/做个人笔记,并遇到了一些我想要一些解释的东西。

谁能解释一下:

Object.prototype.hasOwnProperty("__proto__"); //True 
Object.prototype.__proto__; //null

Object.hasOwnProperty("__proto__"); //False
Object.__proto__; //function(){}

为什么说Object没有自己的属性__proto__,最后一行输出的函数是什么?


编辑:以下部分已在此处解决:Why in JavaScript both "Object instanceof Function" and "Function instanceof Object" return true?

补充问题,为什么下面的说法都是对的?

Function instanceof Object //True 
Object instanceof Function //True

最佳答案

关于__proto__的注释

这不是 ECMAScript 5 的标准属性。这根本没有在 language specification of ECMAScript 5 中定义。 .但是所有环境都广泛支持它的使用。由于它不是语言规范的一部分,因此不鼓励使用它,访问内部原型(prototype)对象的推荐方法是使用 Object.prototype.getPrototypeOfObject.prototype.setPrototypeOf .

注1:__proto__ has been standardized only in ECMAScript 2015 .

注意 2:仅 ECMAScript 2015 支持使用 setPrototypeOf 设置原型(prototype)对象。


现在,让我们从以下几点来看问题中每一行的原因。

  1. 现在,支持__proto__ 的环境已经在Object.prototype 对象中定义了它们,根据MDN .由于大多数对象继承自 Object,因此它们也都继承了 __proto__ 属性。这就是 Object.prototype.hasOwnProperty("__proto__"); 返回 true 的原因。

  2. 但是那个值是null,因为this section语言规范说明 Object.prototype 的内部属性 [[Prototype]] 应该是 null

  3. Object.hasOwnProperty("__proto__"); 返回 False 因为 __proto__ 实际上是在 Object.prototype 上定义的Object 只是继承它。由于 __proto__ 不是它自己的属性,它返回 False

  4. Object.__proto__ 返回 Function 对象,因为 this section语言规范明确指出内部 [[Prototype]] 属性应该是 Function 对象。

关于Javascript __proto__、对象和函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32810766/

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