亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

今天我們將嘗試下花 1 分鐘的時(shí)間簡單地了解下什么是 JS 代理對(duì)象(proxies)?我們可以這樣理解,JS 代理就相當(dāng)于在對(duì)象的外層加了一層攔截,在攔截方法里我們可以自定義一些個(gè)性化的邏輯,定義完后我們可以通過代理定義的方法間接操作對(duì)象。再說得通俗點(diǎn),在我們的生活中,我們買房租房一般不找房東先找中介的道理一樣,因?yàn)橹薪槌洚?dāng)了房源的代理一樣。

接下來我們通過代碼理解下什么是代理,用JS創(chuàng)建代理比較簡單,如下段代碼所示:

let initialObject = { /* 定義對(duì)象 */ };
let handler = { /* 自定義相關(guān)的攔截器處理邏輯 */ };
let proxyedObject = new Proxy(initialObject, handler);

簡單解釋下,我們可以通過代理去調(diào)用 handler 里定義的邏輯去操作對(duì)象,對(duì)象代理有兩個(gè)參數(shù),initialObject 是目標(biāo)對(duì)象,handler 攔截器對(duì)象(或者稱作處理器對(duì)象)。

接下來,我們來看一個(gè)例子,我們通過代理實(shí)現(xiàn)讀取一個(gè)對(duì)象的屬性,如果對(duì)象的屬性不存在,則返回代理中定義的默認(rèn)值,這里我們?cè)诖砝镏貙懥嗽袑?duì)象的 get 方法。

let dog = {
  name: "Spike"
};

const handler = {
    get: (obj, property) => property in obj ? obj[property] : 'You don't have defined  a property named ' +  property;
}

const proxyDog = new Proxy(dog, handler);
console.log(proxyDog.name);
// 將會(huì)輸出 Spike
console.log(proxyDog.age);
// 輸出 You don't have defined  a property named age

上述例子,我們通過 get: (obj, property) => ... 方法重寫了對(duì)象的 get 方法。

最后我再看一個(gè)如何通過代理去更對(duì)對(duì)象的值,如果更新的值不是我們期望的值,系統(tǒng)則拋出異常錯(cuò)誤,不能正常更新,否則重新賦值并更新對(duì)象的屬性。

let dog = {
    name: "Spike",
    age: 1;
};
let handler = { 
    set: (obj, property, value) => { 
        if (property === 'age') { 
            if (!Number.isInteger(value)) throw new TypeError('Use numbers only for age'); 
            if ((value < 0) || (value > 30))  throw new RangeError('A dog can't live that long'); 
        } 
        obj[prop] = value; 
        return true; 
    } 
};

const proxyDog = new Proxy(dog, handler);
proxyDog.age = -1;
// will throw A dog can't live that long
proxyDog.age = 'very old';
// will throw Use numbers only for age

通過 JS 代理我們不僅可以重寫 getters 和 setters 方法,我們還可以進(jìn)行這些操作:deleteProperty、construct、getOwnPropertyDescriptor 等...

今天的文章就到這里,不知道你是否理解代理對(duì)象啦,在接下來的文章里,我們?cè)倭牧拇碓趯?shí)際項(xiàng)目中的運(yùn)用,感謝你的閱讀。

參考來源:http://www.js-craft.io/blog/what-are-JAVAscript-proxies/

Daniel

 

分享到:
標(biāo)簽:JS
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定