1樓:紫雲飛
強答一波,雖然題主的問題已經解決了。題主現在看規範最好不要再看 ES5 了,雖然 ES5 的確是簡單點。這個問題的話看 ES5 勉強也夠了,但以後遇到 ES5 之後的知識點該怎麼辦?
新規範的話,對應的章節在這裡 ECMAScript 2018 Language Specification。
另外,class 型別的函式的 prototype 屬性是唯讀的,因為沒有理由再去改它了:
class
Person
extends
Object
{}Object
.getOwnPropertyDescriptor(Person
,"prototype"
).writable
// false
2樓:小貝殼
諮詢了一位高人,自答一下吧。
Annotated ES5 第7條
If Type(proto) is not Object, set the [[Prototype]] internal property of obj to the standard built-in Object prototype object as described in 15.2.4.
就是說,在通過 new 關鍵字來建立乙個物件的時候,會檢視 Persion.prototype 是不是乙個物件,如果不是的話,就設定為 Object.prototype
如果你想讓 Persion 沒有原型鏈,可以 var person = Object.create(null)
Object.create的執行步驟可以看15.2.3.5吧 :
Annotated ES5
Set the [[Prototype]] internal property of obj to O.
Object
.create
(null
)等價於:
varobj
=new
Object
();obj
.__proto__
=null;
建構函式不能是虛函式
ylq 建構函式不是不能是虛函式,而是完全沒意義。c 在編譯期間就能確定你要建立的物件的具體型別,而這個具體型別包含了什麼,繼承了什麼在編譯期間也是明確的,所以要構造什麼也都是明確的,根本沒必要存在虛建構函式。虛函式的存在是因為編譯期間沒法確定具體呼叫物件,才會有虛函式,虛函式表這麼個東西。 雞賊軒...
C 的建構函式與析構函式?
關於C 的問題,你的心中要有兩個概念,乙個是記憶體的分配,二是記憶體的初始化。C 的建構函式有兩個作用 第一,你必須要有乙個建構函式,compiler才會去給你分配記憶體。第二,分配了記憶體之後,再用建構函式去初始化記憶體。函式體為空,因為類中的每乙個成員都有預設建構函式和析構函式 否則是無法編譯的...
C Java 預設建構函式?
編譯器只有當需要建構函式的時候才會建立預設建構函式。詳細可以參閱 深度探索C 物件模型 摘抄一點 以下四種情況,編譯器會合成預設的建構函式 第一,class 有member object 該member object有default constructor class需要default constr...