我不理解以下代码的输出。
var obj = {}
console.log(Object);
console.log(Object.__proto__);
console.log(obj.prototype);
输出:
ƒ Object() { [native code] }
ƒ () { [native code] }
undefined
答案 0 :(得分:0)
让我们逐一研究这三种情况
console.log(Object); // ƒ Object() { [native code] }
上面的代码返回一个函数,因为Object
是用Javascript定义的用于创建对象属性的构造函数。
console.log(Object.__proto__); // ƒ () { [native code] }
上面的示例返回一个函数,因为Object.__proto__
与Function.prototype
相同,给出
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'。所有对象都是从构造函数创建的,有趣的是,所有构造函数都是对象。那么,首先创建对象或函数的是什么?没有一个。程序员是凭空创建它们的,并在引擎代码中编写了创建语句。
Object
,Function
,Array
是内置的构造函数。
__proto__
(等于__proto__.constructor.prototype
)和prototype
是对象。
由于__proto__
是Object的“继承”,因此所有功能(以及JavaScript中的几乎所有内容)都是inherit
间接来自Object的。
*'inherit'的意思是在没有直接在对象本身上找到属性的情况下,委托给对象的构造函数原型