從如今起要加快點速度了,書中其實有不少知識對於我來講已經很熟悉了,在此我就簡單摘錄一下,固然若是很是重要的知識(我認爲的,可能有失偏頗),我會寫的詳細點,可能還會加入個人理解。下面繼續:javascript
第五章 繼承
java
繼承是大多數編程語言很是重要的主題。良好的繼承不只可使你的系統有邏輯性和層次感,更重要的是能夠減小你的代碼量和開發成本。
正則表達式
5.1僞類
編程
在本節中做者試圖隱藏prototype對象,而儘可能使用一種相似「類」的方式實現繼承,他的作法以下:設計模式
Function.prototype.method=function(name,func){ if(!this.prototype[name]){ this.prototype[name]=func; } return this; } //經過method方法定義一個inherits方法,目的是隱藏prototype實現繼承 Function.method('inherits',function(Parent){ this.prototype=new Parent(); return this; }); /*以上是準備工做*/ var Mammal=function(name){ this.name=name; } Mammal.prototype.get_name=function(){ return this.name } Mammal.prototype.says=function(){ return this.saying||''; } //繼承來了,採用的是級聯的樣式編程,只有一條語句 var cat=function(name){ this.name=name; this.saying='meow'; }.inherits(Mammal). //繼承Mammal method('get_name',function(){ //在cat的原型上添加方法 return this.says()+' '+this.name+' '+this.says(); });
這種僞類的方式做者提出了幾個缺點:數組
1.沒有私有環境,全部屬性都是公開的。閉包
2.沒法訪問super(父類)的方法。 (這點不太理解,構造一個子類的對象不就能夠訪問了嗎?)app
3.若是你在調用構造器時忘記使用new了,危害至關大!因此建議構造器函數用大寫字母。編程語言
5.2對象說明符函數
就是說構造器在參數設定上,儘可能用一個對象,這樣能更好的表達出語義。如:
var myobject=maker(f,l,m); //很差的方式 var myobject=maker({ //比較好的方式 first:f, last:l, male:m });
5.3原型
5.1講的是javascript用「類」的方式實現繼承,這一節介紹怎麼用原型的方式繼承。直接上代碼:
//爲Object對象增長一個方法,這個方法的做用其實是實現了一次對對象的拷貝 if(typeof Object.beget!=='function'){ Object.beget=function(o){ var F=function(){}; F.prototype=o; return new F(); }; } var myMammal={ name:'xxx', get_name:function(){ this.name; }, says:function(){ return this.saying||''; } } var myCat=Object.beget(myMammal);//重點來了,這句是實現了對myMammal對象的繼承 myCat.name='mimi'; myCat.get_name=function(){ return this.says()+" "+this.name; }
5.4函數化
這裏其實又介紹了一個設計模式--函數化模式,我的感受跟模塊模式差很少,都是在內部定義私有變量、私有方法,而後經過特權方法對外提供訪問接口。看個例子:
var mammal=function(spec){ var that={}; that.get_name=function(){ return spec.name; } that.says=function(){ return spec.saying||''; } } var mymammal=mammal({name:'Herb'}); var cat=function(spec){ spec.saying=spec.saying||'meow'; var that=mammal(spec);//繼承父類 that.get_name=function(){ return that.says+' '+spec.name; } return that; } var mycat=cat({name:'Joge'});
若要訪問父類的方法,本書做者提供了一種裝逼的寫法(我的感受沒什麼必要)
Object.method('superior',function(name){ var that=this,method=that[name]; return function(){ return method.apply(that,arguments); }; });
var coolcat=function(spec){ var that=cat(spec), super_get_name=that.superior('get_name'); //調用父類方法get_name that.get_name=function(n){ return 'like '+super_get_name()+' baby'; } return that; } var mycoolcat=coolcat({name:'Bix'}); var name=mycoolcat.get_name(); //'like meow Bix meow baby'
5.5部件(略)
第六章 數組
數組其實沒什麼好說的,他在javascript中就是一個對象。不一樣的是數組繼承自Array.prototype,而不是Object.prototype。並且數組擁有length屬性和不少實用的方法。
(1)刪除數組能夠用delete array[2],但這會在下標2的位置產生一個undefined值,長度不變。能夠用array.splice(2,1)代替他。
(2)數組和對象的使用時機:
當屬性名是小而連續的整數時,你應該使用數組。不然,使用對象。
檢測一個對象是否爲數組的方法:
var is_array=function(value){ return value&& typeof value==='object'&& typeof value.length==='number'&& typeof value.splice==='function'&& !(value.propertyIsEnumerable('length')); }
第七章 正則表達式(略)
我的認爲不用硬背,記住一些基本,會用就行。
第八章 方法
介紹了Object、Array、String、Number等類型的經常使用方法,在此就不一一列舉了。
第九章 代碼風格
本章做者着重介紹了代碼風格的重要性,尤爲像javascript這種有不少缺陷的語言。好的代碼風格能夠增長程序的可讀性,進而加強他正常運行的可能性,以及是否準備按照咱們的意圖去工做的可能性。它也決定了軟件在其生命週期中是否能進行擴展性修改。好的代碼風格包括適當空格、縮進、換行等。
第十章 優美的特性
javascript優美的特性包括:
(1)函數是頭等對象:函數是有詞法做用域的閉包。
(2)基於原型繼承的動態對象:對象是無類別的。咱們能夠經過普通的賦值給任何一個對象增長一個新成員元素。一個對象能夠從另外一個對象繼承成員元素。
(3)對象字面量和數組字面量:這對建立新的對象和數組來講是一種很是方便的表示法。javascript字面量是數據交換格式JSON的靈感之源。
另外,做者對產品特性的解讀很是精彩。在此截取一小段
至此,本書正文部分已介紹完,剩下的就是附錄了,下週繼續。