2016-01-26 16 views
13

Używam wersji babelify 6.3.0 ustawionej na etap 0. ES6/ES7 działają doskonale. Jednak gdy próbuję użyć JavaScript na proxy functionality:Obsługa proxy JavaScript w Babel

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

uzyskać:

ReferenceError: Can't find variable: Proxy 

Jakieś pomysły?

+0

Możliwy duplikat [Error: Reference Proxy nie jest określona] (http: // stackoverflow. com/questions/31348985/reference-error-proxy-is-not-defined) –

Odpowiedz

21

Z Babel website:

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

+1

Cóż, to niefortunne. Zespół Chrome wypuścił polyfill: https://github.com/GoogleChrome/proxy-polyfill, w przypadku, który pomaga każdemu. –

+2

Wygląda na to, że * jest * do zrobienia w ES5, zgodnie z tym pakietem: https://www.npmjs.com/package/babel-plugin-proxy – trusktr

+7

@trusktr Technicznie rzecz biorąc, tak, ale ponieważ twórcy powiedzieli "[i] t is nie nadaje się do środowisk produkcyjnych, ponieważ wpływ na wydajność jest ogromny. " Zastępują każdy dostęp do właściwości poprzez wywołanie specjalnej funkcji. –

1

Babel tłumaczy kod ES6/ES7 (zakładając, że podłączyłeś odpowiednie ustawienia wstępne) do poprawnego kodu ES5.

Obawiam się, że nie ma sposobu, aby wyrazić proxy ES6 za pośrednictwem składni ES5.

Można zauważyć, że proxy nie mają żadnego odpowiednika na es6-features site. Jest też ostrzeżenie o tym in the bottom of 'proxies' section dokumentacji Babel.

3

Można nie proxy pełny obiekt ze wszystkich pułapek ale można utworzyć proxy właściwości pobrać i ustawić przynajmniej.

var proxy = {} 

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

Można nawet owinąć go wokół sposobu

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

, a następnie:

var proxy = {} 

proxyVar(proxy, 'a', 10) 

console.log(proxy.a) // prints 20 
proxy.a = 20 
console.log(proxy.a) // prints 40 
Powiązane problemy