我是一個JavaScript新手,有一個讓我困惑的問題。如何理解Object.hasOwnProperty(「構造函數」)
Object.constructor
是一個函數,但Object.hasOwnProperty("constructor") == false
。爲什麼?
正如我們所知,Object的prev爲空,也許是Object.prototype.__proto__ == null
。如何添加對象的「構造函數」的屬性?
我是一個JavaScript新手,有一個讓我困惑的問題。如何理解Object.hasOwnProperty(「構造函數」)
Object.constructor
是一個函數,但Object.hasOwnProperty("constructor") == false
。爲什麼?
正如我們所知,Object的prev爲空,也許是Object.prototype.__proto__ == null
。如何添加對象的「構造函數」的屬性?
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"
'typeof Object.constructor ===「function」; // true' – 2015-07-12 02:14:52
引用說'Object()'(即「..when * called * ..」)相當於'new Object()'。但是在問題中不會調用稱爲Object的*函數*;有或沒有新的。 – user2864740
當調用Object.hasOwnProperty( 「構造」),正在測試,看看該屬性的構造函數「是否對對象存在。也就是說,您不會查找__proto__鏈來查看鏈中是否存在該屬性。對於Object而言,'constructor'屬性在Object上不存在,它是一個繼承的屬性 - >看看Object .__ proto __。constructor和Object .__ proto __。hasOwnProperty('constructor')
注意:Object .__ proto__ === Function.prototype的// =>從Here
採取正如我們看到的對象不具有它自己的財產「構造」,所以每當我們做b.constructor真正
「對象」是一個函數。當執行'f = function(){}'時,函數本身沒有屬性'構造函數'。至少在Chrome中,Function .__ proto__返回Empty,而Empty具有'構造函數'屬性(這解釋了hasOwnProperty的差異)。我不確定這是如何編寫在ECMAScript規範。 – user2864740