第一處斷點(diǎn)時(shí)對(duì)象成員的存在情況:

第二處斷點(diǎn)時(shí)對(duì)象成員的存在情況:

一句話:關(guān)于js函數(shù):this指的是所在函數(shù)外最近一層的對(duì)象,而嵌套函數(shù)的內(nèi)部函數(shù)內(nèi)的this指的是window對(duì)象。
一句話:js的oo特性:使用this.成員方式定義對(duì)象的成員使用對(duì)象具有js特有的動(dòng)態(tài)持性,類與對(duì)象實(shí)例有差異的,而.prototype.成員定義成員是經(jīng)典的定義方式,類與對(duì)象實(shí)例是統(tǒng)一的。
2)Javascript對(duì)象共享性成員變量實(shí)驗(yàn):
運(yùn)行到第一片斷點(diǎn):

簡(jiǎn)單變量與對(duì)象變量的差別
使用.prototype.定義的成員,如果該成員為簡(jiǎn)單變量則,每個(gè)對(duì)象實(shí)例都有一個(gè)各自的副本。(例如:Man.prototype.noObejctVar)
使用.prototype.定義的成員,如果該成員對(duì)象變量,則每個(gè)對(duì)象實(shí)例都共享同一個(gè)對(duì)象副本。(例如:Man.prototype.ManGhost)
為什么有這樣的差別呢?單從ManGhost變量與noObjectVar變量它們都是使用.prototype.定義的成員是沒有差別的,只是它們類型不同,表示它們?cè)L問和使用用它們的方式是不同的,只是ManGhost變量?jī)?nèi)存放的是new出來的對(duì)象,而noObjectVar變量?jī)?nèi)存放的是值(或某種值的引用),換句話說ManGhost存放的是對(duì)象的引用,通過這個(gè)引用可以操作這個(gè)對(duì)象,noObjectVar變量?jī)?nèi)存放也可是某種值引用,可是無法使用這個(gè)引用來操作它.
從另一個(gè)視角看
noObjectVar變量存放的是字串對(duì)象的引用.
a.noObjectVar="新字符串a(chǎn)";
這表示noObjectVar從原來的存放字符串對(duì)象引用,指向新字符串對(duì)象引用.(也可以說新的字符串對(duì)象覆蓋原字符串對(duì)象)
a.ManGhost=new Ghost("a");
b.ManGhost=new Ghost("b");
這樣a與b就不存在共享對(duì)象的問題了.不過這樣就存在另一個(gè)問題.prototype.ManGhost時(shí)定義新建的對(duì)象就浪費(fèi)了.不過這樣使用.prototype.是錯(cuò)誤的.
使用.prototype.定義成員函數(shù)及定義共享變量才是正確的用法.
使用javascript來正確的定義類請(qǐng)見:[技術(shù)備忘錄]javascript來定義類的規(guī)范
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注