2016-01-26 15 views
13

Sto usando la versione 6.3.0 di babelify impostata sullo stage 0. ES6/ES7 funzionano perfettamente. Tuttavia quando provo ad usare di proxy functionality Javascript:Supporto proxy Javascript in Babel

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

ottengo:

ReferenceError: Can't find variable: Proxy 

Tutte le idee?

+0

Eventuali duplicati di [Errore Riferimento: proxy non è definito] (http: // StackOverflow. it/questions/31348985/reference-error-proxy-is-not-defined) –

risposta

21

Dal Babel website:

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

+1

Beh, questo è un peccato. Il team di Chrome ha rilasciato un polyfill: https://github.com/GoogleChrome/proxy-polyfill, nel caso in cui questo aiuti chiunque. –

+2

Apparentemente * è * fattibile in ES5, secondo questo pacchetto: https://www.npmjs.com/package/babel-plugin-proxy – trusktr

+7

@trusktr Tecnicamente parlando, sì ma come hanno detto i creatori "[i] t is non adatto per ambienti di produzione perché l'impatto sulle prestazioni è enorme. " Sostituiscono ogni singolo accesso di proprietà con una chiamata a una funzione speciale. –

1

Babel traduce il codice ES6/ES7 (supponendo che abbiate collegato i preset appropriati) in codice ES5 valido.

Ho paura che non ci sia modo di esprimere i proxy ES6 tramite la sintassi ES5.

È possibile vedere che i proxy non hanno alcun equivalente su es6-features site. C'è anche un avvertimento su di esso in the bottom of 'proxies' section di Babel docs.

3

Non è possibile procura un oggetto completo con tutte le trappole, ma è possibile creare proxy proprietà per ottenere e impostare almeno.

var proxy = {} 

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

Si può anche avvolgere intorno ad un metodo di

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

E poi:

var proxy = {} 

proxyVar(proxy, 'a', 10) 

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