1樓:巴神
Class.prototype=new Class()這句是用新例項賦值給Class.prototype這時候所有instancof Class的例項的_proto_都指向了這個new Class()的例項相當於改變了例項原型鏈的引用,
例項的_proto_指向Class,Class._proto_指向Class.prototype,
然而此時查詢其可列舉屬性prop的時候,原型鏈是一層一層找的。
2樓:
把new前後的prototype儲存下
var oldProto = Class.prototype
var newProto = Class.prototype = new Class
1. oldProto,new之前的Class.prototype
2. newProto,new之後的Class.prototype
new Class時,將 __proto__指向它(this)的 constructor.prototype,也就是oldProto .
這一步效果newProto.__proto__ === oldProto = true
然後再把newProto 覆蓋 Class.protype 的舊值 oldProto.
3樓:
Class.prototype.__proto__ 其實就是 Object,你 new 出來的物件,一層一層的往上遞迴都指向它。
Class.prototype.__proto__.prop=1;這一句使得所有沒設定過 prop 屬性物件的 prop 屬性都輸出 1。
後面的花樣就不重要了。
4樓:RednaxelaFX
function
Class
()var
classProto
=Class
.prototype
console
.log
(classProto
.__proto__
===Object
.prototype
)// true
classProto
.__proto__
.prop=1
varclassNewProto
=Object
.create
(classProto
,{})
// emulate new
console
.log
(classNewProto
.__proto__
===classProto
)// true
Class
.prototype
=classNewProto
varinst
=Object
.create
(Class
.prototype
,{})
// emulate new
console
.log
(inst
.__proto__
===classNewProto
)// true
console
.log
(inst
.__proto__
.__proto__
===classProto
)// true
console
.log
(inst
.__proto__
.__proto__
.__proto__
===Object
.prototype
)// true
console
.log
(Object
.getOwnPropertyDescriptor(Object
.prototype
,"prop"
))// Object
5樓:Belleve
他是在考察你 new 算符的定義。答案是 1,因為 Class.prototype.__proto__.__proto__.prop = 1。
關於Java中的ConcurrentHashMap的實現原理有大神可以詳細介紹下嗎?
meteor the張 1.7陣列 hashmap,cas rentrantlock 分段鎖1.8陣列 鍊錶 紅黑樹,synchronized cas 優化版的hashmap luoxn28 可以看下這個 mmwx 沒人講1.8版,那我來講講吧。1.8版本相比1.7版本,沒有了分段鎖的概念,轉而使用...
關於java中throw的疑問?
逗泥丸的平方 你太難為人家了,你知道函式必然異常,但是編譯器只能知道函式宣告了異常。就好像你寫if true,當然現在ide也會提示你,但是這的確沒有也沒必要成為語法錯誤 蔣繼發 你在 Code 中執行 throw new Exception,編譯器在語法檢查階段就確定了第 8 行無法到達,所以提示...
關於java瘋狂講義這本書?
紫檸檬 挺好的一本書,買了幾年了,大學時沒怎麼看在吃灰 可能那時看,也感覺無聊乏味,講的太細了 工作後再回頭看,感覺挺好的,講的挺詳細的,有些地方你可能知道那樣用,但是不知道為什麼。比如靜態成員 方法,構造器,變數 不能使用非靜態成員 通俗點講就是靜態方法不能使用非靜態變數 書裡詳細的說了為啥不能。...