Código:
(function () { "use strict"; var proxy; var realTarget; var target; realTarget = {}; target = {}; proxy = new Proxy(target, { isExtensible: function (target) { return Reflect.isExtensible(realTarget); }, preventExtensions: function (target) { return Reflect.preventExtensions(realTarget); } }); Object.freeze(proxy); })();Mensaje de error resultante:
[error] Line 20: Uncaught TypeError: 'preventExtensions' on proxy: trap returned truish but the proxy target is extensible¿Por qué es esto un error? ¿De qué sirve un proxy si no puedo redirigir esta operación?
Las trampas proxy tienen un conjunto de las llamadas invariantes a las que deben ajustarse.
Una de ellas es que la trampa preventExtensions solo puede devolver true si [[IsExtensible]] del objetivo del proxy devuelve false (es decir, si el objetivo es realmente inextensible).
Puede solucionar esto devolviendo false (lo que indica que ha fallado hacer que el objeto sea inextensible):
preventExtensions: function (target) { Reflect.preventExtensions(realTarget); return false }