簡體   English   中英

為什么代理和 Object.create 不能一起工作

[英]Why proxy and Object.create don't work together

當我像下面那樣這樣做時,我總是得到“RangeError:超出最大調用堆棧大小”,但我只是訪問接收器,如果我刪除console.log(receiver); , 很困惑。


const someObject = {};
const proxy6 = new Proxy(someObject, {
  get(target, prop, receiver) {
    console.log(receiver);
    return 111;
  },
});

const derived = Object.create(proxy6);
console.log(derived.someProperty);


我嘗試使用 Object.assign() 來包裝代理,沒關系。

該行為依賴於實現。 例如,Firefox(我運行的是 108 版)這段代碼沒有問題,只是在控制台中打印 object 表示:

在此處輸入圖像描述

在 Chrome/Edge 中,控制台實現想要檢索它要打印的 object 的一些 object 屬性,包括[Symbol.toStringTag] 但是由於receiverderived的,這會再次啟動代理的get處理程序,從而導致無限遞歸。

為避免這種情況,請使您的處理程序代碼有條件:准確確定您希望何時執行該console.log並返回 111。

所以做這樣的事情:

 const someObject = {}; const proxy6 = new Proxy(someObject, { get(target, prop, receiver) { if (["someProperty"].includes(prop)) { // Add more props as desired... console.log(receiver); return 111; } return Reflect.get(target, name); // default }, }); var derived = Object.create(proxy6); console.log(derived.someProperty);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM