對象屬性不存在時,使用||
運算符填充:obj.name||'lpp'
jquery
當檢索一個undefined的值時,能夠經過 &&
運算符來避免錯誤。
例:安全
let obj ={}; obj.name //undefined obj.name.frist //報錯 obj.name && obj.name.frist //先檢索 obj.name是否爲undefined ,false後避免執行後面報錯
檢測對象中是否存在該屬性,不會查找該對象的原型鏈。閉包
在全局建立空的對象框架
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();//開始作肉
能夠使用傳參的形式改變函數內的變量