Javascript面象對象成員、共用成員變數實驗

來源:互聯網
上載者:User

1)Javascript對象成員實驗: 複製代碼 代碼如下: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; /*第二處斷點*/

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

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

一句話:關於js函數:this指的是所在函數外最近一層的對象,而嵌套函數的內建函式內的this指的是window對象。

一句話:js的oo特性:使用this.成員方式定義對象的成員使用對象具有js特有的動態持性,類與對象執行個體有差異的,而.prototype.成員定義成員是經典的定義方式,類與對象執行個體是統一的。
2)Javascript對象共用性成員變數實驗:

複製代碼 代碼如下: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("我只設定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變數記憶體放的是new出來的對象,而noObjectVar變數記憶體放的是值(或某種值的引用),換句話說ManGhost存放的是對象的引用,通過這個引用可以操作這個對象,noObjectVar變數記憶體放也可是某種值引用,可是無法使用這個引用來操作它.

從另一個視角看

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

a.noObjectVar="新字串a";

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

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

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

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

使用.prototype.定義成員函數及定義共用變數才是正確的用法.

使用javascript來正確的定義類請見:[技術備忘錄]javascript來定義類的規範

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.