javascript – Prototypkettenproblem von Objekt und Funktion
仅有的幸福
仅有的幸福 2017-05-19 10:11:54
0
1
521

Das Obige ist mein Test im Browser. Ich kann diese Prototypenkette überhaupt nicht verstehen. Wer kann helfen, es zu erklären

仅有的幸福
仅有的幸福

Antworte allen(1)
滿天的星座

Object 是一个函数,不要被它的名字误导了,所以先脑中补完这个形式

function Object () {
  ...
}

任何函数(构造函数)都有原型,也就是prototype,prototype没什么特别的,就是一个对象。

Object.prototype 输出 “Object { ... }", 不要被这个输出误导,以为Object.prototype是它自己。输出里的“Object”只是说Object.prototype的值“是一个”Object“类型”的对象。

但同时因为JS里function本身也是对象,所以Object除了是函数,也是对象。所有的对象都是根据某个原型“构造”(初始化)而来的.

Object作为对象是什么时候构造的?

答:当它被定义的时候,也就是:

function Object() {
  ...
}

这时JS运行时就依据 function () { [Native code] } 为原型构造了Object这个函数“对象”(实例)。

这个 function () { [Native code] } 是什么?它是JS里所有函数的祖宗。

Object.__proto__.__proto__ 即这个祖宗函数的原型,既然是祖宗怎么会有原型?记住它是函数的祖宗,但它不是“对象”的祖宗,对象的祖宗,就是这个 “Object {__defineGetter__: ...}" 。

你又问,既然对象都是构造而来的,那祖宗对象也应该是构造而来的吧?祖宗对象是万物起源,它是JS的语言设计者定义的,是概念体系的出发点。

可是我看到

Object.prototype.constructor
function Object() { [native code] }

祖宗对象不明明是构造而来的?而且是由Object构造而来的?

这只不过是JS的语言设计者为了概念一致,把祖宗对象的constructor指向了Object而已。

祖宗对象之前是什么呢?

Object.prototype.__proto__
null

道生一,一生二。
道是无。

itlr.cc

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage