Babel中的Javascript代理支持

时间:2016-01-26 22:24:07

标签: javascript proxy babeljs

我正在使用babelify版本6.3.0设置为第0阶段.ES6 / ES7工作得很好。但是,当我尝试使用Javascript的proxy functionality

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

我明白了:

ReferenceError: Can't find variable: Proxy

有什么想法吗?

3 个答案:

答案 0 :(得分:27)

来自Babel website

  

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

答案 1 :(得分:4)

您无法使用所有陷阱代理完整对象,但您至少可以为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

答案 2 :(得分:2)

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

我担心没有办法通过ES5语法表达ES6代理。

您可以看到代理在es6-features site上没有任何等价物。还有关于Babel文档in the bottom of 'proxies' section的警告。