JavaScript之坑了我--閉包助力OOP之模擬私有成員屬性

eBusinessMan發表於2015-11-10


思維引導:(和java對比)
            由於函式體內宣告的區域性變數我們是無法訪問的,這個特徵類似java中的private 成員屬性,所以我們可以將這些宣告的區域性變數看作private成員屬性。Js中閉包的特性,讓我們可以將function中的區域性變數在函式體執行完畢後保留下來(即不讓回收),如此一來就提供了思路給我們來模擬java的private成員。
    程式碼設計如下:

function Person(){
  var name ;

  var age;

  this.setName = function(p_name){ name = p_name ; };

  this.getName = function(){ return age; };

  this.setAge = function(p_age){ age = p_age; };

  this.getAge = function(){ return age; };
}

成員屬性可見性的模擬:js中沒有static ,private,public屬性的概念,僅僅是模擬!!

模擬公有成員屬性:java中的成員變數我們可以直接這樣訪問:物件名.屬性名,類似的,js物件中,語法上也是同樣的屬性訪問方式,因此我們可以將js物件中的屬性都看作是public成員。如:

var man = {name : “luozhixiao”};

console.log( man.name );
       模擬靜態屬性:java中,static屬性/函式是屬於類的,呼叫方法是:類名.屬性名  /  類名.方法名()
注意:js中無法模擬protected 成員屬性。


事到如今,js可以模擬java的OOP的大部分精髓。。。。。。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29900383/viewspace-1827386/,如需轉載,請註明出處,否則將追究法律責任。

相關文章