溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

es6中的proxy如何使用

發(fā)布時(shí)間:2022-05-10 14:20:03 來源:億速云 閱讀:118 作者:zzz 欄目:web開發(fā)

本篇內(nèi)容主要講解“es6中的proxy如何使用”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“es6中的proxy如何使用”吧!

在es6中,proxy用于攔截在一個(gè)對象上的指定操作,可以對外界的訪問進(jìn)行過濾和改寫;Proxy在目標(biāo)對象之前架設(shè)一層“攔截”,外界對該對象的訪問都必須通過這層攔截,語法為“new Proxy(target, handler);”。

本教程操作環(huán)境:windows10系統(tǒng)、ECMAScript 6.0版、Dell G3電腦。

es6中proxy的用法是什么

Proxy 可以理解成,在目標(biāo)對象之前架設(shè)一層“攔截”,外界對該對象的訪問,都必須先通過這層攔截,因此提供了一種機(jī)制,可以對外界的訪問進(jìn)行過濾和改寫。Proxy 這個(gè)詞的原意是代理,用在這里表示由它來“代理”某些操作,可以譯為“代理器”。下面是官方文檔對proxy的一個(gè)定義。

let p = new Proxy(target, handler);

target :需要使用Proxy包裝的目標(biāo)對象(可以是任何類型的對象,包括原生數(shù)組,函數(shù),甚至另一個(gè)代理)。

handler: 一個(gè)對象,其屬性是當(dāng)執(zhí)行一個(gè)操作時(shí)定義代理的行為的函數(shù)(可以理解為某種觸發(fā)器)。

ES6中提出了一個(gè)新的特性,就是proxy,用來攔截在一個(gè)對象上的指定操作。這個(gè)功能非常的有用。舉一個(gè)例子來說:

var engineer = { name: 'Joe Sixpack', salary: 50 };
var interceptor = {
 set: function (receiver, property, value) {
  console.log(property, 'is changed to', value);
  receiver[property] = value;
 }
};
engineer = Proxy(engineer, interceptor);

engineer對象被代理Proxy構(gòu)建的代理對象代替,傳入Proxy的第二個(gè)參數(shù)是一個(gè)處理器函數(shù),一個(gè)處理器函數(shù)有多種方法,如get、set等方法。這里的set方法能夠攔截到那些在代理對象身上進(jìn)行的所有的屬性賦值操作。

當(dāng)我們執(zhí)行下面賦值:

engineer.salary = 60;

會觸發(fā)處理器,輸出信息:

salary is changed to 60

每當(dāng)代理對象被賦值,處理器函數(shù)就會調(diào)用,這樣就可以用來調(diào)試某些問題。

當(dāng)然了,Proxy可不是僅僅為了調(diào)試而誕生的,如果你用過Sencha Touch 或者 AngularJS的話,就會發(fā)現(xiàn)這些框架都是類似數(shù)據(jù)模型綁定的功能。

筆者曾在Sencha Touch中用過代理,代碼如下:

proxy:{//數(shù)據(jù)代理
//       type:'localstorage',
//       id:'bills',
    // limitParam:'limit',
    // pageParam:'page',
    //將用戶代理改為sql,通過websql來解決localstorage的5MB存儲上限的問題
    type:'sql',
    database:'myDB',
    table:'bill',
},
//filters:[{property:"kind",value:"無"}],//過濾屬性
listeners:{
    removerecords:function(){
      console.log("數(shù)據(jù)被刪除");
    },
    addrecords:function(){
      console.log("數(shù)據(jù)被追加");
    },
    updaterecord:function(){
      console.log("數(shù)據(jù)被修改");
    },
}

可以看到,它采用的是一種監(jiān)聽setter和getter的辦法,而在Angular中采用的則是臟檢測。。當(dāng)我們有了Proxy后,對于簡單的數(shù)據(jù)模型綁定就可以簡化這些特定的檢測方式了。

到此,相信大家對“es6中的proxy如何使用”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI