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