1. 程式人生 > >《javascript設計模式與開發實踐》筆記

《javascript設計模式與開發實踐》筆記

1,靜態型別語言:變數在最初定義便被賦予型別;動態型別語言:變數只有在被賦值的時候才知道是什麼型別;

2,多型:同一個操作作用於不同的物件上,會產生不同的結果;(且不需要使用條件分支語句來判斷執行結果,而是讓物件們自己負責自己的行為)

var   makesound=function(animal){ animal.sound();

}

var  chicken=function(){}

chicken.prototype.sound=function(){ return  "咕咕咕";

}

那麼要求在呼叫各個物件的時候不存在型別限制,既,這個操作傳遞的引數既可以是鴨子型別,也可以是小黃雞型別;

這對於動態型別語言js來說是不需要考慮的;編譯器根本不檢查js變數或者引數的型別;

3,高內聚低耦合:內聚指一個模組內部各個元素之間聯絡的緊密程度,耦合指的是各個模組之間聯絡的緊密程度;

4,封裝:在c++中封裝指private,protected,public;即將資料/資訊隱藏保護的手段;在js中,封裝指將資料/資訊利用函式的作用域,轉化成私有或者公有;

var   object1={

var   val1;                         //私有變數

show:function(){               //公有 return  10;

}}

5:原型模式:

想要將一個物件(包括它的方法,屬性)完全克隆的方法:js中有內建的Object.create()方法;

var    object1={

show:function(){

return  obj;

}};

var  object2=Object.create(object1);

不支援object.create方法:

object.create=function(obj){ var  f=function(){};

f.prototype=obj;

return  new f();

其實就是:object2=new f(); 然後f物件指向原型object1;這樣以來,其實object2就是

一直愚蠢的以為:克隆物件這個操作,是先定義一個物件,然後讓其他變數new一下,錯誤程式碼:

var  obj1={

show:function(){return  'ok';};

}

obj2=new obj1();

obj2.show(); 

實際上克隆物件,這個物件的外表只能是以函式形式展現:

function  obj1(){ this.show=funtion(){ return  'ok';

}}

var obj2=new  obj1();

obj2.show();  //這才對;