如何理解Object.hasOwnProperty(“构造函数”)

时间:2015-07-12 00:24:41

标签: javascript

我是JavaScript的新手,并且有一个令我困惑的问题。

Object.constructor是一个函数,但Object.hasOwnProperty("constructor") == false。为什么?

我们知道Object的prev是null,可能是Object.prototype.__proto__ == null。如何添加“构造函数”的对象属性?

3 个答案:

答案 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)

http://dmitrysoshnikov.com/ecmascript/javascript-the-core/

取自Here

的图片

正如我们所看到的,对象没有自己的属性'构造函数',所以无论何时我们做b.constructor,它都会转到它的原型并寻找构造函数属性原型。但是b.hasOwnProperty('构造函数')会失败,但b.prototype.hasOwnProperty(' constructor')将返回true。