《javascript語言精粹》讀書筆記(三)

    從如今起要加快點速度了,書中其實有不少知識對於我來講已經很熟悉了,在此我就簡單摘錄一下,固然若是很是重要的知識(我認爲的,可能有失偏頗),我會寫的詳細點,可能還會加入個人理解。下面繼續: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的靈感之源。

    另外,做者對產品特性的解讀很是精彩。在此截取一小段

        

                


    至此,本書正文部分已介紹完,剩下的就是附錄了,下週繼續。

相關文章
相關標籤/搜索