JavaScript中Object.prototype的层次结构是什么?

时间:2019-02-09 14:39:13

标签: javascript javascript-objects

我不理解以下代码的输出。

var obj = {}
console.log(Object);
console.log(Object.__proto__);
console.log(obj.prototype);

输出:

ƒ Object() { [native code] }

ƒ () { [native code] }

undefined

2 个答案:

答案 0 :(得分:0)

让我们逐一研究这三种情况

console.log(Object); // ƒ Object() { [native code] }

上面的代码返回一个函数,因为Object是用Javascript定义的用于创建对象属性的构造函数。

console.log(Object.__proto__); // ƒ () { [native code] }

上面的示例返回一个函数,因为Object.__proto__Function.prototype相同,给出

enter image description here

console.log(obj.prototype); // undefined

上面的代码返回undefined,因为未为显式创建的对象定义prototype属性。 prototype属性是为构造函数定义的,因此Object.prototype将为您提供Objects原型,该原型与obj.__proto__

相同

答案 1 :(得分:0)

Object.__proto__ === Function.prototype && Function.prototype.__proto__.constructor === Object

是循环链接。 Function中的所有函数都是'inherit',而Object中的所有对象都是'inherit'。所有对象都是从构造函数创建的,有趣的是,所有构造函数都是对象。那么,首先创建对象或函数的是什么?没有一个。程序员是凭空创建它们的,并在引擎代码中编写了创建语句。

ObjectFunctionArray是内置的构造函数。

__proto__(等于__proto__.constructor.prototype)和prototype是对象。

由于__proto__是Object的“继承”,因此所有功能(以及JavaScript中的几乎所有内容)都是inherit间接来自Object的。

*'inherit'的意思是在没有直接在对象本身上找到属性的情况下,委托给对象的构造函数原型