我是JavaScript的新手,并且有一个令我困惑的问题。
Object.constructor
是一个函数,但Object.hasOwnProperty("constructor") == false
。为什么?
我们知道Object的prev是null,可能是Object.prototype.__proto__ == null
。如何添加“构造函数”的对象属性?
答案 0 :(得分:2)
Object.constructor
不是函数; Object.prototype.constructor
是,Object
本身就是构造函数。来自MDN:
在非构造函数上下文中调用时,Object的行为与新的Object()完全相同。
要查看,请尝试:
Object.hasOwnProperty("constructor") == false
Object.prototype.hasOwnProperty("constructor") == true
typeof Object == "function"
typeof (new Object) == "object"
答案 1 :(得分:1)
当你调用Object.hasOwnProperty(" constructor")时,你正在测试是否属性'构造函数'存在于Object上。也就是说,您不会查找__proto__链以查看链上是否存在该属性。对于Object,'构造函数' Object上不存在属性,它是一个继承属性 - >看一下Object .__ proto __。constructor和Object .__ proto __。hasOwnProperty(' constructor')
注意:对象.__ proto__ === Function.prototype // =>真
答案 2 :(得分:0)
取自Here
的图片正如我们所看到的,对象没有自己的属性'构造函数',所以无论何时我们做b.constructor,它都会转到它的原型并寻找构造函数属性原型。但是b.hasOwnProperty('构造函数')会失败,但b.prototype.hasOwnProperty(' constructor')将返回true。