欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Javascript面象對象成員、共享成員變量實驗

 更新時間:2010年11月19日 22:21:29   作者:  
Javascript 面象對象成員、共享成員變量實驗,需要的朋友可以參考下。
1)Javascript對象成員實驗:
復(fù)制代碼 代碼如下:

var f = function d() {
this.a = "a";/*這句運行后不存在f.a也不存在d.a存在一個window.a*/
var b = "b";/*局部變量*/
};
var o = { ff: function () {
var a = "a"; /*局部變量*/
this.b = "b"; /*這句運行后存在o.b*/
}
};
function Man(){
this.age = 30;
};
Man.prototype.sex = 1;
Man.prototype.name = function () {
};
debugger;/*第一處斷點*/
f();
o.ff();
var m = new Man();
debugger; /*第二處斷點*/

第一處斷點時對象成員的存在情況:

第二處斷點時對象成員的存在情況:

一句話:關(guān)于js函數(shù):this指的是所在函數(shù)外最近一層的對象,而嵌套函數(shù)的內(nèi)部函數(shù)內(nèi)的this指的是window對象。

一句話:js的oo特性:使用this.成員方式定義對象的成員使用對象具有js特有的動態(tài)持性,類與對象實例有差異的,而.prototype.成員定義成員是經(jīng)典的定義方式,類與對象實例是統(tǒng)一的。
2)Javascript對象共享性成員變量實驗:

復(fù)制代碼 代碼如下:

function Ghost(_name) {
this.name = _name;
this.age = 1000;
}
Ghost.prototype.setName = function (_name) {
this.name = _name;
}
function Man(_name){
this.age = 30;
this.ghost = new Ghost("實例變量" + _name);
};
Man.prototype.ManGhost = new Ghost("共享變量");
var a = new Man("a");
var b = new Man("b");
var amg = a.ManGhost.setName("我只設(shè)置a的共享變量");
debugger; /*第一處斷點*/
var ag = a.ghost;
var bg = b.ghost;
var bmg = b.ManGhost;
debugger; /*第二處斷點*/

運行到第一片斷點:

簡單變量與對象變量的差別

使用.prototype.定義的成員,如果該成員為簡單變量則,每個對象實例都有一個各自的副本。(例如:Man.prototype.noObejctVar)

使用.prototype.定義的成員,如果該成員對象變量,則每個對象實例都共享同一個對象副本。(例如:Man.prototype.ManGhost)

為什么有這樣的差別呢?單從ManGhost變量與noObjectVar變量它們都是使用.prototype.定義的成員是沒有差別的,只是它們類型不同,表示它們訪問和使用用它們的方式是不同的,只是ManGhost變量內(nèi)存放的是new出來的對象,而noObjectVar變量內(nèi)存放的是值(或某種值的引用),換句話說ManGhost存放的是對象的引用,通過這個引用可以操作這個對象,noObjectVar變量內(nèi)存放也可是某種值引用,可是無法使用這個引用來操作它.

從另一個視角看

noObjectVar變量存放的是字串對象的引用.

a.noObjectVar="新字符串a(chǎn)";

這表示noObjectVar從原來的存放字符串對象引用,指向新字符串對象引用.(也可以說新的字符串對象覆蓋原字符串對象)

a.ManGhost=new Ghost("a");

b.ManGhost=new Ghost("b");

這樣a與b就不存在共享對象的問題了.不過這樣就存在另一個問題.prototype.ManGhost時定義新建的對象就浪費了.不過這樣使用.prototype.是錯誤的.

使用.prototype.定義成員函數(shù)及定義共享變量才是正確的用法.

使用javascript來正確的定義類請見:[技術(shù)備忘錄]javascript來定義類的規(guī)范

相關(guān)文章

  • javascript實現(xiàn)下拉提示選擇框

    javascript實現(xiàn)下拉提示選擇框

    這篇文章主要介紹了javascript實現(xiàn)下拉提示選擇框的相關(guān)資料,需要的朋友可以參考下
    2015-12-12
  • 原生態(tài)js,鼠標(biāo)按下后,經(jīng)過了那些單元格的簡單實例

    原生態(tài)js,鼠標(biāo)按下后,經(jīng)過了那些單元格的簡單實例

    下面小編就為大家?guī)硪黄鷳B(tài)js,鼠標(biāo)按下后,經(jīng)過了那些單元格的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-08-08
  • js獲取select標(biāo)簽選中值的兩種方式

    js獲取select標(biāo)簽選中值的兩種方式

    獲取select標(biāo)簽選中的值有很多方法,下面通過兩種方式使用js來進(jìn)行獲取,喜歡的朋友可以參考下
    2014-01-01
  • js如何實現(xiàn)點擊標(biāo)簽文字,文字在文本框出現(xiàn)

    js如何實現(xiàn)點擊標(biāo)簽文字,文字在文本框出現(xiàn)

    這篇文章主要介紹了js如何實現(xiàn)點擊標(biāo)簽文字,文字在文本框出現(xiàn),感興趣的小伙伴們可以參考下
    2015-08-08
  • 微信小程序云開發(fā)詳細(xì)教程

    微信小程序云開發(fā)詳細(xì)教程

    這篇文章主要為大家詳細(xì)介紹了微信小程序云開發(fā)的詳細(xì)教程,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-05-05
  • JS判斷數(shù)組里是否有重復(fù)元素的方法小結(jié)

    JS判斷數(shù)組里是否有重復(fù)元素的方法小結(jié)

    這篇文章主要介紹了JS判斷數(shù)組里是否有重復(fù)元素的方法,結(jié)合實例形式分析了javascript針對數(shù)組重復(fù)元素判斷相關(guān)的遍歷、排序、遞歸等相關(guān)操作技巧,需要的朋友可以參考下
    2019-05-05
  • JS實現(xiàn)移動端實時監(jiān)聽輸入框變化的實例代碼

    JS實現(xiàn)移動端實時監(jiān)聽輸入框變化的實例代碼

    這篇文章主要介紹了JS實現(xiàn)移動端實時監(jiān)聽輸入框變化的解決方案,需要的朋友可以參考下
    2017-04-04
  • JS解惑之Object中的key是有序的么

    JS解惑之Object中的key是有序的么

    這篇文章主要介紹了JS解惑之Object中的key是有序的么,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2019-05-05
  • 最新評論