這是我無法弄清的一個技巧問題。當我從MDN讀取時,我們無法從Math
創建實例。運行new Math()
將產生一個例外Math is not a constructor
。但數學在Math.constructor
內有自己的財產。是的,它是Object
類型,但我們可以運行它Math.constructor()
。但即使我們通過exec Math.constructor = Function.constructor
重新定義它也會拋出異常。數學不是一個構造函數,但它有
現在,我已經在我心中的若干構想:
- 構造包含一個隱藏屬性和瀏覽器引擎拒絕調用它。
- 構造函數在「TypeError:not a constructor」集合中具有索引的瀏覽器引擎中解釋爲特殊的C++對象。
有人可以回答我爲什麼構造函數存在,但我不能創建一個實例嗎?
在此先感謝。
每個對象都有一個構造函數,並不意味着你可以創建對象文字的新實例等。這個問題的答案可能只是*「,因爲規範說是這樣」*。 – adeneo
@AndreiZhamoida [你可以隨時閱讀語言規範:]](http://www.ecma-international.org/ecma-262/6.0/) – Pointy
'Math'是一個對象。這個對象必須被構造。每個對象*繼承它的構造函數的原型方法(在這種情況下爲Object)。 'Object.prototype.constructor = Object' – Thomas