剛才看一篇博文的時候, 動手測試了一下 JavaScript的原型鏈, 原型對象,發現每個構造器(賦給了某個 prototype ) new 出來的對象都有各自獨立的原型對象 __proto__.
prototype 與 __proto__指向的都是同一個對象,一個是“類”上面的,一個是“對像”上面的。 prototype 從字面上“type”就說明了,這個代表一個“類”, 是一個類別、集合,而不是具體的。
類似於 C++語言中類與對象的關系。 而__proto__就是根據具體 的類“prototype” , 實例化處理的具體的某個對象, 通過prototype new不同的對象的__proto__是彼此獨立的。。
好像錯了!!看下圖
錯了,錯了,原來下面這種測試代碼理解錯了。 我們給 s.name 賦值的時候,並沒有去改到s.__proto__這個對象的name屬性。而是 給s對象新增了 name 屬性。其輸出 s.name的時候,
並沒有去 s.__proto__上面找 name 屬性,而是直接在 s 對象本身上面就發現了 name 屬性, 所以並不會向上在s.__proto__原型鏈上去找name 屬性。!!剛才理解錯了,還好反應過來了。
測試代碼 如下:
function Fun(){ //構造器 }; Fun.prototype = { name : 'ysr' }; var s = new Fun(); s.name = 'pxk'; console.log(s.name); //pxk var t = new Fun(); console.log(t.name); //ysr