Javascript ___;协议__;对象和函数

Javascript ___;协议__;对象和函数,javascript,prototype,Javascript,Prototype,我正在从头开始学习/在JavaScript上做个人笔记,遇到了一些我想解释的事情 有人能解释一下吗: Object.prototype.hasOwnProperty("__proto__"); //True Object.prototype.__proto__; //null Object.hasOwnProperty("__proto__"); //False Object.__proto__; //function(){} 为什么它说对象没有自己的属性\uuuuu proto\u

我正在从头开始学习/在JavaScript上做个人笔记,遇到了一些我想解释的事情

有人能解释一下吗:

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

Object.hasOwnProperty("__proto__"); //False 
Object.__proto__; //function(){} 
为什么它说对象没有自己的属性
\uuuuu proto\uuuuu
,它在最后一行输出的函数是什么


编辑:以下部分已在此处解决:

另外一个问题,为什么下面的陈述都是正确的

Function instanceof Object //True 
Object instanceof Function //True 
关于
\uuuu proto\uuuuu
从ECMAScript 5开始,这不是标准属性。这一点在手册中根本没有定义。但是所有的环境都广泛支持它的使用。由于它不是语言规范的一部分,因此不鼓励使用它,建议访问内部原型对象的方法是使用或

注1:

注2:只有ECMAScript 2015才支持使用
setPrototypeOf
设置原型对象


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

  • 现在,支持
    \uuuu proto\uuuu
    的环境已经在
    对象中定义了它们。由于大多数对象都继承自
    对象
    ,因此它们也都继承
    \uuuuu proto\uuuu
    属性。这就是为什么
    Object.prototype.hasOwnProperty(“\uuu-proto\uuu”)返回true

  • 但是它的值是
    null
    ,因为语言规范说
    对象的内部属性
    [[Prototype]]
    。Prototype
    应该是
    null

  • Object.hasOwnProperty(“\uuuu proto\uuuu”)
    返回
    False
    ,因为
    \uuuu proto\uuuu
    实际上是在
    对象上定义的。prototype
    对象
    只是继承它。由于
    \uuuu proto\uuuu
    不是它自己的属性,因此它将返回
    False

  • Object.\uuuu proto\uuuu
    返回
    函数
    对象,因为语言规范明确规定内部
    [[Prototype]]
    属性应该是
    函数
    对象


  • 关于你的补充问题:
    函数
    对象
    都是函数(“构造函数”),也都是对象,因为所有函数都是对象。你的补充问题已经详细讨论过了。