讀javascript語言精髓筆記

對象

默認值填充

對象屬性不存在時,使用||運算符填充:obj.name||'lpp'jquery

object屬性不肯定時避免報錯

當檢索一個undefined的值時,能夠經過 &&運算符來避免錯誤。
例:安全

let obj ={};
obj.name //undefined
obj.name.frist //報錯
obj.name && obj.name.frist //先檢索 obj.name是否爲undefined ,false後避免執行後面報錯

hasOwnproperty

檢測對象中是否存在該屬性,不會查找該對象的原型鏈。閉包

最小化使用全局變量

在全局建立空的對象框架

var MYAPP = {}; //讓該空對象做爲惟一的全局對象
MYAPP.WriteCode = {
    //babala
}

最小化使用全局變量能夠減小全局污染、下降和其餘庫框架的重名互相影響dom

給類型添加方法

Object.prototype能夠給全部構造函數對象添加方法函數

Object.prototype.showA = function () {
    console.log(this.a)
}
let o = {a : 1};
o.showA(); //1
 //屆時,想到了jquery裏的封裝
  $(el).on('click',function(){
    console.log(1)
 })

嘗試實現:this

首先對象是一個dom對象,其次聲明瞭一個on函數,裏面兩個參數分別是事件和匿名函數;
那麼先從dom對象入手,給該函數添加方法必須找到該對象實例的構造函數,在控制檯輸入 document.__proto__找到 HTMLElement 再好比prototype

'str'.__proto__ : String //這樣就找到該對象實例的構造函數
HTMLElement.prototype.on = function(evt,fun){
   this[evt] = fun;
}
el.on('onclick',function(){
    console.log('balabla');
})

模塊

經過函數和閉包來構造模塊

模塊模式的通常形式是:一個定義了私有變量和函數的函數,利用閉包建立能夠訪問私有變量和函數的特權函數;最後返回這個特權函數,或者把他們保存到一個可訪問的地方。

利:摒棄全局變量減小全局變量污染、安全促使信息隱藏、讓思路清晰明瞭code

例():對象

//作飯  foodMaterial spice爲私有屬性
let cook = function(){
    let FoodMaterial = 'Tomatoes'; //食材:西紅柿
    let Spice = '食用鹽'; //做料:食用鹽
    return {
        buy:function(){
            console.log('購買' + FoodMaterial + '和' + 'Spice' );
        },
        doFood:function(){
            console.log(`開始作${FoodMaterial}`);
        }
    }
}
let o = cook();
o.buy();//購買Tomatoes和Spice
o.doFood();//開始作Tomatoes

忽然想吃肉,不吃西紅柿了

//作飯 
let cook = function(){
    let FoodMaterial = 'Tomatoes'; //食材:西紅柿
    let Spice = '食用鹽'; //做料:食用鹽
    return {
        buy:function(){
            console.log('購買' + FoodMaterial + '和' + 'Spice' );
        },
        doFood:function(){
            console.log(`開始作${FoodMaterial}`);
        },
        setFood:function(food){
            //未傳參則不執行賦值
            food && (FoodMaterial = food);
        }
    }
}
let o = cook();
o.setFood('肉');
o.buy();    //購買肉和Spice
o.doFood();//開始作肉

能夠使用傳參的形式改變函數內的變量

相關文章
相關標籤/搜索