第一次寫部落格,琢磨了好久不知道該寫些什麼,後來想了想,就當學習筆記了嘛,反正也沒人看╮(╯▽╰)╭。
正好今天在看雙越老師的設計模式的時候講到了**模式,於是就順勢查了查es6中proxy的語法,看了看阮一峰老師的書,感覺又開啟了新世界的大門。
先說說什麼是proxy吧。proxy英文的意思是**,用阮老師的話說,就是proxy 用於修改某些操作的預設行為,等同於在語言層面做出修改,所以屬於一種「元程式設計」(meta programming),即對程式語言進行程式設計。
好吧,簡單講就是在目標物件外邊加了一層攔截層,在訪問目標的時候會進行一次攔截、過濾。
es6原生提供了proxy建構函式,可以用來生成例項。
扔兩行**先
// 生成乙個proxy例項
var proxy =
newproxy
(target, handler)
;
其中target代表的就是我們要**的目標函式;
handler代表的就是我們要做的攔截的動作;
proxy一共支援13種攔截操作,阮老師講的很是詳細,我拿過來抄一遍╮(╯▽╰)╭,詳情參照 [這兒][4].;
get(target, propkey, receiver):攔截物件屬性的讀取,比如proxy.foo
和proxy['foo']
。
set(target, propkey, value, receiver):攔截物件屬性的設定,比如proxy.foo = v
或proxy['foo'] = v
,返回乙個布林值。
** has(target, propkey)**:攔截propkey in proxy
的操作,返回乙個布林值。
deleteproperty(target, propkey):攔截delete proxy[propkey]
的操作,返回乙個布林值。
ownkeys(target):攔截object.getownpropertynames(proxy)
、object.getownpropertysymbols(proxy)
、object.keys(proxy)
、for…in迴圈,返回乙個陣列。該方法返回目標物件所有自身的屬性的屬性名,而object.keys()
的返回結果僅包括目標物件自身的可遍歷屬性。
getownpropertydescriptor(target, propkey):攔截object.getownpropertydescriptor(proxy, propkey)
,返回屬性的描述物件。
defineproperty(target, propkey, propdesc):攔截object.defineproperty(proxy, propkey, propdesc)
、object.defineproperties(proxy, propdescs)
,返回乙個布林值。
preventextensions(target):攔截object.preventextensions(proxy)
,返回乙個布林值。
getprototypeof(target):攔截object.getprototypeof(proxy)
,返回乙個物件。
i***tensible(target):攔截object.i***tensible(proxy)
,返回乙個布林值。
setprototypeof(target, proto):攔截object.setprototypeof(proxy, proto)
,返回乙個布林值。如果目標物件是函式,那麼還有兩種額外操作可以攔截。
construct(target, args):攔截 proxy 例項作為構造函式呼叫的操作,比如new proxy(...args)
。
// 定義乙個明星
let star =
// 再定義乙個經紀人
let agent =
newproxy
(star,
if(name ===
'price'
)// 其他的明星資訊可以告訴外面
return target[name];}
,set
:function
(target, name, value)
else}}
})//輸出姓名,不保密,直接返回明星的姓名
console.
log(agent.name)
;//朱xx
//明星**要保密,所以返回了**人的**
console.
log(agent.phone)
;//18622222222
//明星自己不**,輸出的是**人報的價
console.
log(agent.price)
;//200000
//給**人**120000
agent.customprice =
120000
;//**太低了,丟擲錯誤
//重新**
agent.customprice =
200000
;//**人覺得合理,那麼明星就值這個價了
console.
log(agent.customprice)
;//200000
上面的例子裡面主要使用了proxy的get和set屬性。這裡建議大家可以去學習一下雙越老師的js設計模式課程,在講到**模式的時候講了這個明星**人的例子,講的很形象,我只是拿來湊個熱鬧~哈哈哈
這第一篇寫的有點爛了~啊哈哈哈哈哈哈哈
反正就是給自己當筆記寫的,等想不起來的時候回來看一眼,東拼西湊的從各位大神那拿來不少東西,其實離真正理解還差的遠呢~哈哈哈哈哈哈
就這樣吧~~~~~~~~~~後面加油!
寫給自己看的
我不常寫日誌,不過最近各種事情,還是有點需要記錄下來。今天下午上資料庫的時候,本來以為被鄙視了的 筆試居然發來恭喜通過的通知,說是等待面試,出乎意料的同時也感嘆rp又用掉了很多 最近的rp消耗確實有點失常,painterbee在mm上的表現就不說了,在校賽上也拿到了之前沒拿過的高名次,雖然是題目的區...
寫給自己看的Promise
static pending pending 準備狀態 static fulfilled fulfilled 解決狀態 static rejected rejected 拒絕狀態 1.初始化狀態 值 then中沒 有處理的函式陣列 2.將resolve和reject函式傳遞 出去 construct...
無題!寫給自己看的!
好吧!這個東西是寫給自己看的,可以看做是日記,或者是隨筆吧!這些天感覺實在太墮落了,至少,在寫完這篇文章之後,我這學期不會再墮落了!從星期六晚上開始,我就一直在墮落,事情源於win8,說實話,我討厭win8,雖然說它比win7要強上一些,不過感覺用不慣!為什麼墮落和win8扯上關係呢?因為哥這幾天花...