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