【问题标题】:Javascript __proto__, Object and FunctionJavascript __proto__,对象和函数
【发布时间】:2015-12-24 23:21:54
【问题描述】:

我正在从头开始学习/做关于 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 

【问题讨论】:

  • 关于您的附加问题:FunctionObject 都是函数(可以说是“构造函数”),也是对象,因为所有函数都是对象。
  • 你的附加问题已经在this post精心。

标签: javascript prototype


【解决方案1】:

关于__proto__的注释

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

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

注意 2:使用 setPrototypeOf 设置原型对象仅在 ECMAScript 2015 中支持。


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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2016-05-22
    • 2014-06-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-04
    • 2011-08-22
    • 1970-01-01
    • 2022-08-16
    • 2017-09-13
    相关资源
    最近更新 更多