2016-01-26 15 views
13

私はバベルのバージョン6.3.0をステージ0に設定して使用しています.ES6/ES7はうまく動作しています。私はJavascriptのproxy functionalityを使用しようとすると、しかし:BabelのJavascriptプロキシサポート

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

私が取得:

ReferenceError: Can't find variable: Proxy 

任意のアイデア?

+0

の可能性のある重複[参照エラー:プロキシが定義されていない](のhttp://のstackoverflow。 com/questions/31348985/reference-error-proxy-is-not-defined) –

答えて

21

Due to the limitations of ES5, Proxies cannot be transpiled or polyfilled. See support in various JavaScript engines.

+1

これは残念です。 Chromeチームは、誰にでも役立つように、ポリフィル:https://github.com/GoogleChrome/proxy-polyfillをリリースしました。 –

+2

このパッケージによれば、ES5では*明らかに*できます:https://www.npmjs.com/package/babel-plugin-proxy – trusktr

+7

@trusktr技術的に言えば、クリエイターとしては「私はいませんパフォーマンスの影響が大きいため、運用環境には適していません。彼らは、すべての単一のプロパティへのアクセスを特別な関数への呼び出しで置き換えます。 –

1

Babelは、ES6/ES7コード(適切なプリセットを接続していると仮定します)を有効なES5コードに変換します。

ES5の構文でES6プロキシを表現する方法がないことは怖いです。

プロキシがes6-features siteに相当するものではないことがわかります。 Babelのドキュメントin the bottom of 'proxies' sectionについての警告もあります。 Babel websiteから

3

あなたはすべてのトラップとプロキシ完全なオブジェクトことはできませんが、あなたが得ると、少なくとも設定のためのプロキシのプロパティを作成することができます。

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 
関連する問題