Babel 中的 Javascript 代理支持

Javascript Proxy support in Babel

本文关键字:支持 代理 Javascript 中的 Babel      更新时间:2023-09-26

我正在使用设置为阶段 0 的 babelify 版本 6.3.0。 ES6/ES7 工作得很好。 但是,当我尝试使用Javascript的代理功能时:

set product(product={}) {
  this._product = new Proxy({}, {})
}

我得到:

ReferenceError: Can't find variable: Proxy

有什么想法吗?

来自 Babel 网站:

由于 ES5 的限制,代理无法转译或填充。请参阅各种 JavaScript 引擎中的支持。

您无法使用所有陷阱代理完整对象,但至少可以为 get 和 set 创建代理属性。

var proxy = {}
Object.defineProperty(proxy, 'a', {
  get: function() { return bValue; },
  set: function(newValue) { bValue = newValue; }
});

您甚至可以将其包装在方法周围

function proxyVar(obj, key, initVal) {
  Object.defineProperty(obj, key, {
    get: function() { return bValue*2; },
    set: function(newValue) { bValue = newValue; }
    value: initVal
  });
}

然后:

var proxy = {}
proxyVar(proxy, 'a', 10)
console.log(proxy.a) // prints 20
proxy.a = 20
console.log(proxy.a) // prints 40

Babel 将 ES6/ES7 代码(假设您已连接适当的预设)转换为有效的 ES5 代码。

恐怕没有办法通过 ES6 语法表达 ES5 代理。

您可以看到代理在 es6 功能站点上没有任何等效项。在 Babel 文档的"代理"部分的底部也有关于它的警告。