js每日一練 第四天

const num = add[1][2][3] + 10 //期望num結(jié)果為16

const num = add[1][5][3] + 20 //期望num結(jié)果為29

問:如何才能輸出num期望結(jié)果呢

這是一個典型的動態(tài)屬性

add[1]明顯add是一個對象

這時候我們就可以使代理來解答了

?const add = new Proxy({? ? ? ?

????????????????????_store:0 // 把這里當成累加?

????????? },{? ? ? ?

????????????????get(target,p,receiver){? //target為代理對象 p為讀取的屬性 //receiver為代理后的對象add? ? ? ?

????????????????????????????????target._store += +p; // 我們只需要累加他的屬性就行了 這里需要轉(zhuǎn)換成數(shù)字 不然就成字符拼接了? ? ? ?

????????????????????????????????return receiver; //為啥要返回add 因為add[1][2][3]他是一個鏈式調(diào)用 相當于還是調(diào)用的add本身? ? ? ?

????????????}?

? })

js代理對象是可以和普通數(shù)字進行相加的 但是他需要轉(zhuǎn)換

如果上面的代碼就這樣運行會報錯 他說不能將一個Symbole轉(zhuǎn)換成一個數(shù)字

Cannot conver a Symbol value to a number at Ojbect.get

這里我們需要注意當add代理對象和數(shù)字進行相加的時候 他會傳進來個符號(Symbol(Symbol.toPrimitive))這個符號叫做知名符號 這個知名符號表示

將一個對象轉(zhuǎn)換成原始類型的時候他就會調(diào)用這個屬性 也就意味著我只要給他這個

符號屬性就行了

const add = new Proxy({? ? ?

????????????? _store:0 // 把這里當成累加?

????????? },{? ? ? ?

????????????????get(target,p,receiver){? //target為代理對象 p為讀取的屬性 //receiver為代理后的對象add? ? ? ?

????????????????????if(p === Symbol.toPrimitive){ // 說明在進行原始類型轉(zhuǎn)換 這個符號要求返回一個函數(shù)? ? ? ? ? ?

????????????????????????????return ()=>{? ? ? ? ? ? ? ?

????????????????????????????????????return target._stroe; 然后我們再返回累加的結(jié)果就行? ? ? ? ? ?

????????????????????????????????}

????????????????????? ? ? ? }? ? ? ?

????????????????????????target._store += +p; // 我們只需要累加他的屬性就行了 這里需要轉(zhuǎn)換成數(shù)字 不然就成字符拼接了? ? ? ?

????????????????????????return receiver; //為啥要返回add 因為add[1][2][3]他是一個鏈式調(diào)用 相當于還是調(diào)用的add本身? ? ? ?

????????????????}

})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 每日一題 以下哪個會打印出"3"?3.toString() //報錯 Uncaught SyntaxError...
    咸小七閱讀 457評論 0 0
  • const命令: 聲明一個只讀常量,一旦聲明,聲明的值就不能改變 聲明的常量和let一樣,不可重復(fù)聲明 本...
    菜菜的小菜鳥閱讀 686評論 0 0
  • 1. undefined 和 null 有什么區(qū)別? 相似之處: 它們屬于 JavaScript 的 7 種基本類...
    耶啵_閱讀 351評論 0 0
  • Javascript 客戶端腳本語言,用于用戶交互 特點: 弱類型 解釋型 基于對象 事件驅(qū)動 單線程/異步(ca...
    一步丶丿麟閱讀 177評論 0 0
  • ECMAScript是1996年網(wǎng)景公司把JavaScript提交給了歐洲計算器制作聯(lián)合會;版本:97年-1.0;...
    神明sama閱讀 433評論 0 0

友情鏈接更多精彩內(nèi)容