[問題] this和prototype

看板Ajax作者 (嗡嗡)時間13年前 (2012/06/16 11:28), 編輯推噓4(4010)
留言14則, 3人參與, 最新討論串1/1
var A = function() { this.b = "b"; }; A.prototype.c = "c"; var a = new A(); a.b; // "b" a.c; // "c" 請問,上面使用this和prototype定義的特性有什麼不同嗎? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.44.115.232

06/16 11:58, , 1F
一個是設定到所有物件,一個是設定到單一物件的樣子。
06/16 11:58, 1F

06/16 13:15, , 2F
跟繼承有關.. prototype就如同字面一樣,就是他的原型
06/16 13:15, 2F

06/16 13:18, , 3F
prototype裡面定義的會繼承下去 this就只作用在目前物件
06/16 13:18, 3F

06/17 21:03, , 4F
this設定的是該物件本身
06/17 21:03, 4F

06/17 21:04, , 5F
prototype設定的是該物件的prototype(廢話)
06/17 21:04, 5F

06/17 21:04, , 6F
當程式在一個物件中尋找一個屬性但找不到時 才會尋找該
06/17 21:04, 6F

06/17 21:05, , 7F
物件的prototype看看是否有該屬性 所以this設定的屬性
06/17 21:05, 7F

06/17 21:05, , 8F
比prototype優先
06/17 21:05, 8F

06/17 21:05, , 9F
簡單的說 上文的程式碼你可以繼續寫a.c = "d"覆寫過去
06/17 21:05, 9F

06/17 21:06, , 10F
但是由new A()得來的新物件的.c還是會==="c"
06/17 21:06, 10F

06/17 21:07, , 11F
只要delete a.c a.c就會再次變回"c"
06/17 21:07, 11F

06/17 21:07, , 12F
更正一下 我的第四句 正確的說找該物件的__proto__
06/17 21:07, 12F

06/17 21:08, , 13F
物件的__proto__是由生產fn的prototype得來的
06/17 21:08, 13F

06/17 21:10, , 14F
自己google一下javascript prototype吧 很多介紹的
06/17 21:10, 14F
文章代碼(AID): #1Fs_rNgb (Ajax)