澄清构造函数和__proto__属性

时间:2016-08-18 17:48:34

标签: javascript constructor prototype

我一直在javascript中阅读constructor__proto__。我想我了解__proto__属性的基础知识但是我对{{1}有点麻烦属性。这是我到目前为止对这两个属性的理解,如果我错了请纠正我,或者如果我错过了某些观点则补充。 javascript中的每个对象都有一个名为constrcutor的“隐藏”属性,默认情况下指向__proto__。现在,当使用new创建对象的实例时。此属性的值被修改并分配给对象Object.prototype。我不确定调用ConstructorName.prototype之前__proto__的默认值是什么。现在关于new我有点困惑我读this并且到目前为止认为{{3}}默认情况下,属性为空,当调用new时,.constructor被修改并分配constructor。如果我朝着正确的方向前进,请告诉我。

1 个答案:

答案 0 :(得分:1)

  

javascript中的每个对象都有一个"隐藏"属性__proto__

没有。隐藏属性称为 [[prototype]] .__proto__是一个不常使用的getter访问它,您应该使用Object.getPrototypeOf

  

默认情况下指向Object.prototype

"默认"可能会产生误导 - 这取决于对象的创建方式。对于普通对象文字,是的,它是Object.prototype

  

现在,当使用new创建对象的实例时。修改此属性的值并为其指定对象ConstructorName.prototype。在调用new之前,我不确定__proto__的默认值是什么。

之前没有任何价值。创建对象时从最初设置原型。在调用new之前,没有对象。

  

现在关于.constructor我有点困惑我读了这个,到目前为止认为构造函数属性默认为空,当调用new时,构造函数被修改并分配ConstructorName.prototype.constructor

不,在任何地方都没有分配任何内容,实例上没有.constructor属性。他们.prototype对象继承属性(以及其他属性)。 ConstructorName.prototype.constructor属性是在创建ConstructorName函数的实例中创建的。