handler.getOwnPropertyDescriptor()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since September 2016.
El método handler.getOwnPropertyDescriptor()
captura Object.getOwnPropertyDescriptor()
.
Sintaxis
var p = new Proxy(target, {
getOwnPropertyDescriptor: function (target, prop) {},
});
Parámetros
Valor Devuelto
El método getOwnPropertyDescriptor
debe devolver un objeto o undefined
.
Descripción
El método handler.getOwnPropertyDescriptor()
captura Object.getOwnPropertyDescriptor()
.
Intercepciones
Este método intercepta las siguientes operaciones:
Invariantes
Si los siguientes invariantes son violados, el proxy lanzará TypeError
:
getOwnPropertyDescriptor
debe devolver un objeto oundefined
.- No puede devolver que una propiedad no existe si está presente en el objeto como no configurable.
- No puede devolver que una propiedad no existe si esta está presente como una propiedad propia del objeto destino y el objeto no es extensible.
- No puede devolver que una propuedad existe, si esta no está presente en el objeto destino y el objeto no es extensible.
- No puede devolver que una propiedad es no configurable si esta no existe en el objeto destino o si existe pero sí es configurable.
- El resultado de
Object.getOwnPropertyDescriptor(target)
puede ser aplicado al objeto destino medianteObject.defineProperty
y no lanzará ningún tipo de excepción.
Ejemplos
El siguiente código captura Object.getOwnPropertyDescriptor()
.
var p = new Proxy(
{ a: 20 },
{
getOwnPropertyDescriptor: function (target, prop) {
console.log("called: " + prop);
return { configurable: true, enumerable: true, value: 10 };
},
},
);
console.log(Object.getOwnPropertyDescriptor(p, "a").value); // "called: a"
// 10
El siguiente código viola uno de los invariantes definidos previamente.
var obj = { a: 10 };
Object.preventExtensions(obj);
var p = new Proxy(obj, {
getOwnPropertyDescriptor: function (target, prop) {
return undefined;
},
});
Object.getOwnPropertyDescriptor(p, "a"); // TypeError is thrown
Especificaciones
Specification |
---|
ECMAScript® 2025 Language Specification # sec-proxy-object-internal-methods-and-internal-slots-getownproperty-p |