您好,登錄后才能下訂單哦!
本篇內(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電腦。
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í)!
免責(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)容。