Pau*_*tte 3 javascript constructor actionscript ecmascript-5 jscript
Math对象没有prototype属性,但具有构造函数属性.有没有重新定义构造函数有用的情况?
的Math对象(准确地说:对象通过的初始值称为MathECMAScript的全局对象的属性)的不具有constructor属性,看到的ECMAScript语言规范,5.1版,第15.8节"Math对象".因此,
Math.hasOwnProperty("constructor")
Run Code Online (Sandbox Code Playgroud)
返回false(符合ECMAScript Ed.3及更高版本的实现).
该Math对象通过原型链从其原型继承一个constructor属性,该原型是"标准的内置对象原型对象(15.2.4)"(同上),与该Object.prototype属性最初引用的相同.后一个对象提供了几个有用的属性,例如Object.prototype.hasOwnProperty(见上文).因此有意义的是,Math对象的原型链不是空的.
该Math对象也继承Object.prototype.constructor仅仅是ECMAScript实现中无条件继承的副作用(除了版本4提议的实现,可能还有将来的版本)属性没有合适的可见性修饰符来防止这种情况(如private在几种基于类的语言中).当然,Object从同一原型继承的实例构造函数是Object全局对象属性的初始值引用的对象.所以Object.prototype.constructor必须反映这一点.因此,评估的结果
Math.constructor === Object
Run Code Online (Sandbox Code Playgroud)
是true.
所有对象都有一个constructor属性,表示创建该对象的构造函数.
甚至({}).constructor回报Object().