2016-01-26 10 views
13

Ich benutze Babelify Version 6.3.0 auf Stufe 0 eingestellt. ES6/ES7 funktionieren gut. Jedoch wenn ich versuche, proxy functionality zu verwenden Javascripts:Javascript Proxy-Unterstützung in Babel

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

ich:

ReferenceError: Can't find variable: Proxy 

Irgendwelche Ideen?

+0

Mögliche Duplikat [Referenz Fehler: Proxy ist nicht definiert] (http: // Stackoverflow. com/questions/31348985/Referenz-Fehler-Proxy-ist nicht definiert) –

Antwort

21

Vom Babel website:

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

+1

Nun, das ist bedauerlich. Das Chrome-Team hat ein Polyfill veröffentlicht: https://github.com/GoogleChrome/proxy-polyfill, falls das irgendjemandem hilft. –

+2

Offenbar ist * ES * in ES5 machbar, nach diesem Paket: https://www.npmjs.com/package/babel-plugin-proxy – trusktr

+7

@trusktr Technisch gesehen ja aber wie die Erschaffer sagten "[i] t is nicht geeignet für Produktionsumgebungen, da die Auswirkungen auf die Leistung enorm sind. " Sie ersetzen jeden einzelnen Eigentumszugriff durch einen Aufruf einer speziellen Funktion. –

1

Babel übersetzt ES6/ES7-Code (vorausgesetzt, Sie haben die entsprechenden Voreinstellungen angeschlossen) in gültigen ES5-Code.

Ich fürchte, es gibt keine Möglichkeit, ES6-Proxies über ES5-Syntax auszudrücken.

Sie können sehen, dass Proxies keine Entsprechung auf es6-features site haben. Es gibt auch eine Warnung darüber in the bottom of 'proxies' section von Babel docs.

3

Sie kann nicht Proxy ein vollständiges Objekt mit allen Fallen, aber sie proxied Eigenschaften für get erstellen und zumindest eingestellt.

var proxy = {} 

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

Sie können es sogar wickeln um eine Methode

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

Und dann:

var proxy = {} 

proxyVar(proxy, 'a', 10) 

console.log(proxy.a) // prints 20 
proxy.a = 20 
console.log(proxy.a) // prints 40