摘要:是中添加的內(nèi)置對(duì)象,和配合功能十分強(qiáng)大。理解根據(jù)的文檔,是對(duì)原對(duì)象的包裝。可以包裝的內(nèi)容包括一系列等,值得注意的是同樣是一種可以攔截的操作。同時(shí),對(duì)于未定義的操作保持原結(jié)果。
問(wèn)題
前一段時(shí)間在字節(jié)跳動(dòng)時(shí)聊到了Proxy。起因是問(wèn)道Vue中數(shù)據(jù)綁定的實(shí)現(xiàn),回答通過(guò)設(shè)置setter和getter實(shí)現(xiàn),問(wèn)這樣有什么缺點(diǎn),答在對(duì)對(duì)象的屬性的監(jiān)控方面存在瑕疵,例如通過(guò)直接設(shè)置數(shù)組下標(biāo)進(jìn)行賦值,或者對(duì)對(duì)象直接進(jìn)行修改,是無(wú)法觀察到的,必須使用Vue.set添加,或者使用Array.prototype.push等方法。
面試官介紹說(shuō)在Vue3中已經(jīng)通過(guò)Proxy解決了這個(gè)問(wèn)題。Proxy是ES6中添加的內(nèi)置對(duì)象,和Reflect配合功能十分強(qiáng)大。正好今天看到一個(gè)問(wèn)題。
根據(jù)MDN的文檔,Proxy是對(duì)原對(duì)象的包裝。可以包裝的內(nèi)容包括一系列g(shù)et、set等,值得注意的是getPrototypeOf同樣是一種可以攔截的操作。同時(shí),對(duì)于未定義的操作保持原結(jié)果。
在instanceof的頁(yè)面,可以看到如下示例
function C() {} function D() {} var o = new C(); // true, because: Object.getPrototypeOf(o) === C.prototype o instanceof C;
那么,在上面那個(gè)問(wèn)題中,既然未定義proxy的getPrototypeOf,那它就該與原對(duì)象保持一致。使用以下代碼進(jìn)行驗(yàn)證:
Object.getPrototypeOf(proxy) === Array.prototype //true進(jìn)一步思考
那么,是不是對(duì)于一切行為,在不做任何攔截的情況下,就能保證與目標(biāo)對(duì)象的行為完全一致呢?很顯然,這是不可能的。例如
a = {} b = new Proxy(a, {}) console.log(a === b) //false
以及this的指向問(wèn)題(案例來(lái)自阮一峰文章)
const target = { m: function () { console.log(this === proxy); } }; const handler = {}; const proxy = new Proxy(target, handler); target.m() // false proxy.m() // true
雖然大部分情況下這應(yīng)該不會(huì)成為大的障礙,但遇到錯(cuò)誤的時(shí)候可以從這里入手尋找問(wèn)題。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/101747.html
摘要:在中構(gòu)造器的典型特點(diǎn)就是首字母大寫,我們通過(guò)原對(duì)象代理列表格式去創(chuàng)建對(duì)象創(chuàng)建的這個(gè)對(duì)象我們稱之為代理對(duì)象。就是原對(duì)象是當(dāng)前的屬性名是代理對(duì)象。理解為明星的經(jīng)理人消極怠工原封不動(dòng)地轉(zhuǎn)告外界的信息給明星本身。但是要注意與是兩個(gè)不同的對(duì)象。 ES6之Proxy proxy的中文有代理的意思。在其他的程序設(shè)計(jì)語(yǔ)言中這個(gè)單詞也具有類似的含義。 它是什么 Proxy是一個(gè)構(gòu)造器。在js中構(gòu)造器的典...
摘要:理解元編程和是屬于元編程范疇的,能介入的對(duì)象底層操作進(jìn)行的過(guò)程中,并加以影響。元編程中的元的概念可以理解為程序本身。中,便是兩個(gè)可以用來(lái)進(jìn)行元編程的特性。在之后,標(biāo)準(zhǔn)引入了,從而提供比較完善的元編程能力。 導(dǎo)讀 幾年前 ES6 剛出來(lái)的時(shí)候接觸過(guò) 元編程(Metaprogramming)的概念,不過(guò)當(dāng)時(shí)還沒有深究。今天在應(yīng)用和學(xué)習(xí)中不斷接觸到這概念,比如 mobx 5 中就用到了 Pr...
20190124問(wèn): 如何理解es6中的Proxy? 試題解析:對(duì)proxy的理解,可能會(huì)延伸到vue的雙向綁定 Proxy(代理) 定義 可以理解為為目標(biāo)對(duì)象架設(shè)一層攔截,外界對(duì)該對(duì)象的訪問(wèn),都必須通過(guò)這層攔截 簡(jiǎn)單示例: const obj = new Proxy({}, { get: (target, key, receiver) => { return JS ...
20190124問(wèn): 如何理解es6中的Proxy? 試題解析:對(duì)proxy的理解,可能會(huì)延伸到vue的雙向綁定 Proxy(代理) 定義 可以理解為為目標(biāo)對(duì)象架設(shè)一層攔截,外界對(duì)該對(duì)象的訪問(wèn),都必須通過(guò)這層攔截 簡(jiǎn)單示例: const obj = new Proxy({}, { get: (target, key, receiver) => { return JS ...
摘要:關(guān)于在計(jì)算機(jī)領(lǐng)域是一個(gè)很普遍的概念,中文通常翻譯為代理,代理一般用于描述某人或某事代表他人行事。常見的概念有代理服務(wù)器反向代理代理模式等。所以至少可以起到兩方面的作用進(jìn)行訪問(wèn)控制和增加功能。理解了上面兩個(gè)問(wèn)題,學(xué)習(xí)的就簡(jiǎn)單多了。 關(guān)于Proxy Proxy在計(jì)算機(jī)領(lǐng)域是一個(gè)很普遍的概念,中文通常翻譯為代理,代理一般用于描述某人或某事代表他人行事。常見的概念有Proxy Server(代...
閱讀 3743·2021-11-24 09:39
閱讀 3477·2019-08-30 15:56
閱讀 1378·2019-08-30 15:55
閱讀 1042·2019-08-30 15:53
閱讀 1929·2019-08-29 18:37
閱讀 3610·2019-08-29 18:32
閱讀 3137·2019-08-29 16:30
閱讀 2940·2019-08-29 15:14