iT邦幫忙

DAY 26
6

JavaScript 三十參系列 第 26

JavaScript 三十參(26):封裝

參與iT邦JavaScript中忍比賽,獲得一本JS武林祕級“JavaScript設計模式”,因而閉門修練月餘,今神功既成故節錄三十片段,以饗邦友。


相信大家對“封裝”並不陌生,“封裝”目的是將方法或屬性聲明為私用或公用,並對作用域加以約束,以讓程式碼更為可靠。

封裝可分為4種:

(1)私有:函數內之var即屬此類
(2)特權:函數內用this關鍵字即屬此類,在函數外可呼叫
(3)共有静態:可以想成class method,直接用建構式呼叫之
(4)共有:直接鏈在prototype的方式

看看以下範例:

(1)私有屬性和方法

var Pkg =function(){
           var name ='總裁';
           var method1 =function(){
           }
         }

var p = new Pkg();
console.log(p.name)    //undefined(外部看不到私有屬性)

(2)特權屬性和方法

var Pkg = function(){
               
    this.title   = '有特權與方法' ;  
    this.getName = function(){  
       return("總裁");  
    };  
};  
  
var p = new Pkg();  
console.log(p.getName());   //總裁
console.log(p.title);       //有特權與方法

(3)共有静態屬性和方法

var Pkg = {};
Pkg._name ='總裁有名聲';
Pkg.alertName =function(){
    console.log(Pkg._name);
};

Pkg.alertName();	//總裁有名聲

(4)共有屬性和方法

var Pkg = {};
Pkg.prototype = {
    init:function(){
        console.log('總裁有名聲再加許多房');          
    }
};

Pkg.prototype.init();	//總裁有名聲再加許多房

好了,不要再羨慕總裁了,其實咱自己就自己的總裁呀....冷

(待)

JavaScript 三十參(總整理)


上一篇
JavaScript 三十參(25):閉包(Closure)
下一篇
JavaScript 三十參(27):DOM和瀏覽器(1/3)
系列文
JavaScript 三十參30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 則留言

0
總裁
iT邦好手 1 級 ‧ 2012-11-03 10:21:22

var Pkg =function(){
var name ='總裁';
var method1 =function(){
};
var Pkg = function(){
this.title ='總裁有特權與方法' ;
this.getName =function(){
return name;
};
};

var p = new Pkg();
p.getName(); //總裁有特權與方法

name=應該只有兩個字吧...那一堆字是title!!!

ted99tw iT邦高手 1 級 ‧ 2012-11-03 16:50:10 檢舉

哭哭哭

想不到宇宙超級無敵無精無蟲程設大師的程式碼被發現巴哥....我真是太感動了!!感快奉上禮物一份!!嬰粟花一份...偷笑

0
fillano
iT邦超人 1 級 ‧ 2012-11-03 23:43:54

還可以用匿名函數封裝,例如:

<pre class="c" name="code">
(function(window){
    var a = null;
    window.getInstanceOfA = function() {
        if(a===null) a = new classA();
        return a;
    }
    function classA() {
    }
})(window);
var b = getInstanceOfA();
...
var c = getInstanceOfA();
...
console.log(b===c);

變數a在所有的程式中都是唯一的,而且只能透過getInstanceOfA函數來取得,這樣就可以用來實作出singleton。把a改成陣列,用來存放classA的instance,然後管理a的length,就可以做出resource pool。

ted99tw iT邦高手 1 級 ‧ 2012-11-04 00:16:18 檢舉

iT邦幫忙MVPfillano提到:
singleton

哇,好讚的singleton與resource pool!!趕快偷偷把費公的私房菜用奇異筆抄在牆壁上...XD

我要留言

立即登入留言