对象属性不存在时,使用||
运算符填充: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();//开始作肉
能够使用传参的形式改变函数内的变量