NodeJS TypeError:无法从类未声明私有成员的对象中读取该成员

bt1cpqcv  于 2023-02-15  发布在  Node.js
关注(0)|答案(2)|浏览(223)

我有一些问题,当我使用代理与 puppet 库。
这是类定义

const puppeteer = require("puppeteer");

class CustomPage {
  static async build() {
    const browser = await puppeteer.launch({ headless: false });
    const page = await browser.newPage();
    const customPage = new CustomPage(page);
    const superPage = new Proxy(customPage, {
      get: function (target, property) {
        //pay attention to the order between browser and page because of an issue
        return customPage[property] || browser[property] || page[property];
      }
    });
    console.log("superPage in CustomPage class definition", superPage);
    return superPage;
  }
  constructor(page) {
    this.page = page;
  }
}

module.exports = CustomPage;

这是我运行它时得到的错误

TypeError: Cannot read private member from an object whose class did not declare it

       7 | beforeEach(async () => {
       8 |   page = await Page.build();
    >  9 |   await page.goto("localhost:3000");
         |              ^
      10 | });

你能帮我一下吗?

2ledvvac

2ledvvac1#

看起来goto函数调用了一些像#someProperty这样声明为私有的属性。代理和私有属性不能一起工作。
这就是问题所在:https://github.com/tc39/proposal-class-fields/issues/106
简而言之,你必须放弃使用其中之一的想法:代理或私有属性。在您的情况下,由于私有属性是Puppeteer的一部分,您将不得不放弃代理。我认为它可以用 Package 器代替。

pxyaymoc

pxyaymoc2#

如果有人不想放弃代理,我想出了一个可行的方法(大概在大多数情况下不能代表所有人)。

{
  get(target, prop, receiver) {
    return (params) => {
      return target[prop](params);
    }
  }
}

也许这就是他说的“一些 Package ”?不确定。到目前为止对我很有效。

相关问题