參與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(); //總裁有名聲再加許多房
好了,不要再羨慕總裁了,其實咱自己就自己的總裁呀....
(待)
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!!!
想不到宇宙超級無敵無精無蟲程設大師的程式碼被發現巴哥....我真是太感動了!!感快奉上禮物一份!!嬰粟花一份...
還可以用匿名函數封裝,例如:
<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。
iT邦幫忙MVPfillano提到:
singleton
哇,好讚的singleton與resource pool!!趕快偷偷把費公的私房菜用奇異筆抄在牆壁上...