《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(); //這才對;