摘要:對(duì)象默認(rèn)值填充對(duì)象屬性不存在時(shí),使用運(yùn)算符填充屬性不確定時(shí)避免報(bào)錯(cuò)當(dāng)檢索一個(gè)的值時(shí),可以通過運(yùn)算符來避免錯(cuò)誤。例報(bào)錯(cuò)先檢索是否為,后避免執(zhí)行后面報(bào)錯(cuò)檢測(cè)對(duì)象中是否存在該屬性,不會(huì)查找該對(duì)象的原型鏈。
對(duì)象 默認(rèn)值填充
對(duì)象屬性不存在時(shí),使用||運(yùn)算符填充:obj.name||"lpp"
object屬性不確定時(shí)避免報(bào)錯(cuò)當(dāng)檢索一個(gè)undefined的值時(shí),可以通過 &&運(yùn)算符來避免錯(cuò)誤。
例:
let obj ={}; obj.name //undefined obj.name.frist //報(bào)錯(cuò) obj.name && obj.name.frist //先檢索 obj.name是否為undefined ,false后避免執(zhí)行后面報(bào)錯(cuò)hasOwnproperty
檢測(cè)對(duì)象中是否存在該屬性,不會(huì)查找該對(duì)象的原型鏈。
最小化使用全局變量在全局創(chuàng)建空的對(duì)象
var MYAPP = {}; //讓該空對(duì)象作為唯一的全局對(duì)象 MYAPP.WriteCode = { //babala }
最小化使用全局變量可以減少全局污染、降低和其他庫框架的重名互相影響
給類型添加方法Object.prototype可以給所有構(gòu)造函數(shù)對(duì)象添加方法
Object.prototype.showA = function () { console.log(this.a) } let o = {a : 1}; o.showA(); //1 //屆時(shí),想到了jquery里的封裝 $(el).on("click",function(){ console.log(1) })
嘗試實(shí)現(xiàn):
首先對(duì)象是一個(gè)dom對(duì)象,其次聲明了一個(gè)on函數(shù),里面兩個(gè)參數(shù)分別是事件和匿名函數(shù);
那么先從dom對(duì)象入手,給該函數(shù)添加方法必須找到該對(duì)象實(shí)例的構(gòu)造函數(shù),在控制臺(tái)輸入 document.__proto__找到 HTMLElement 再比如
"str".__proto__ : String //這樣就找到該對(duì)象實(shí)例的構(gòu)造函數(shù) HTMLElement.prototype.on = function(evt,fun){ this[evt] = fun; } el.on("onclick",function(){ console.log("balabla"); })模塊 通過函數(shù)和閉包來構(gòu)造模塊
模塊模式的一般形式是:一個(gè)定義了私有變量和函數(shù)的函數(shù),利用閉包創(chuàng)建可以訪問私有變量和函數(shù)的特權(quán)函數(shù);最后返回這個(gè)特權(quán)函數(shù),或者把他們保存到一個(gè)可訪問的地方。
利:摒棄全局變量減少全局變量污染、安全促使信息隱藏、讓思路清晰明了
例():
//做飯 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){ //未傳參則不執(zhí)行賦值 food && (FoodMaterial = food); } } } let o = cook(); o.setFood("肉"); o.buy(); //購買肉和Spice o.doFood();//開始做肉
可以使用傳參的形式改變函數(shù)內(nèi)的變量
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/96721.html
摘要:推薦高性能網(wǎng)站建設(shè)指南高性能網(wǎng)站建設(shè)進(jìn)階指南理由在讀完前幾本書之后我們對(duì)前端的性能和自己的代碼的效率已經(jīng)達(dá)到相當(dāng)?shù)母叨攘?,然后我們?cè)诮佑|一些前端工程師的一些精髓。 WEB前端研發(fā)工程師,在國(guó)內(nèi)算是一個(gè)朝陽職業(yè),這個(gè)領(lǐng)域沒有學(xué)校的正規(guī)教育,大多數(shù)人都是靠自己自學(xué)成才。本文主要介紹自己從事web開發(fā)以來(從大二至今)看過的書籍和自己的成長(zhǎng)過程,目的是給想了解JavaScript或者是剛...
摘要:推薦高性能網(wǎng)站建設(shè)指南高性能網(wǎng)站建設(shè)進(jìn)階指南理由在讀完前幾本書之后我們對(duì)前端的性能和自己的代碼的效率已經(jīng)達(dá)到相當(dāng)?shù)母叨攘?,然后我們?cè)诮佑|一些前端工程師的一些精髓。 WEB前端研發(fā)工程師,在國(guó)內(nèi)算是一個(gè)朝陽職業(yè),這個(gè)領(lǐng)域沒有學(xué)校的正規(guī)教育,大多數(shù)人都是靠自己自學(xué)成才。本文主要介紹自己從事web開發(fā)以來(從大二至今)看過的書籍和自己的成長(zhǎng)過程,目的是給想了解JavaScript或者是剛...
摘要:推薦高性能網(wǎng)站建設(shè)指南高性能網(wǎng)站建設(shè)進(jìn)階指南理由在讀完前幾本書之后我們對(duì)前端的性能和自己的代碼的效率已經(jīng)達(dá)到相當(dāng)?shù)母叨攘?,然后我們?cè)诮佑|一些前端工程師的一些精髓。 WEB前端研發(fā)工程師,在國(guó)內(nèi)算是一個(gè)朝陽職業(yè),這個(gè)領(lǐng)域沒有學(xué)校的正規(guī)教育,大多數(shù)人都是靠自己自學(xué)成才。本文主要介紹自己從事web開發(fā)以來(從大二至今)看過的書籍和自己的成長(zhǎng)過程,目的是給想了解JavaScript或者是剛...
摘要:如果你問一個(gè)年輕的前端開發(fā)人員,你在今后的年內(nèi)如何提升自己的能力他可能會(huì)說我現(xiàn)在對(duì)前端比較熟悉,但我想深入了解,另外現(xiàn)在發(fā)展的很快我也想看一下。再舉一個(gè)例子,我會(huì)留意身邊的程序員所用的鍵盤。只有少部分的程序員會(huì)買高端的靜電容鍵盤,比如。 如果你問一個(gè)年輕的前端開發(fā)人員,你在今后的 3 年內(nèi)如何提升自己的能力?他可能會(huì)說我現(xiàn)在對(duì) Web 前端比較熟悉,但我想深入了解 AngularJS,...
閱讀 3463·2023-04-26 01:46
閱讀 3029·2023-04-25 20:55
閱讀 5627·2021-09-22 14:57
閱讀 3035·2021-08-27 16:23
閱讀 1774·2019-08-30 14:02
閱讀 2128·2019-08-26 13:44
閱讀 703·2019-08-26 12:08
閱讀 3191·2019-08-26 11:47