JavaScript | método handler.setPrototypeOf()

El método handler.setPrototypeOf() en JavaScript es una trampa para el método Object.setPrototypeOf() y devuelve un valor booleano.
Sintaxis: 
 

const p = new Proxy(target, {
  setPrototypeOf: function(target, prototype) {
  }
});

Parámetros: Este método acepta dos parámetros como se mencionó anteriormente y se describe a continuación: 
 

  • target: este parámetro es el objeto de destino.
  • prototipo: este parámetro es el nuevo prototipo o nulo del objeto.

Valor devuelto: este método devuelve un valor booleano. Devuelve verdadero si el [[Prototipo]] se cambió con éxito.
Los siguientes ejemplos ilustran el método handler.setPrototypeOf() en JavaScript:
Ejemplo 1: 
 

javascript

<script>
const handler1 = {
  setPrototypeOf(gfg, gfgProto) {
    gfg.geneticallyModified = true;
    return false;
  }
};
 
const gfgProto = {};
const gfg = {
  geneticallyModified : false
};
 
const proxy1 = new Proxy(gfg, handler1);
console.log(Reflect.setPrototypeOf(proxy1, gfgProto));
console.log(gfg.geneticallyModified);
 
var soo={ 
  foo:1 
} 
var proxy = new Proxy(soo, { 
  setPrototypeOf(target, newProto) { 
  } 
}); 
console.log('a' in proxy);
</script>

Producción: 
 

false
true
false

Ejemplo 2: 
 

javascript

<script>
const handlerThrows = {
    setPrototypeOf(target, newProto) {
        throw new Error('custom error');
    }
};
 
const newProto = {}, target = {};
 
const p2 = new Proxy(target, handlerThrows);
document.writeln(Object.setPrototypeOf(p2, newProto)); 
document.writeln(Reflect.setPrototypeOf(p2, newProto));
</script>

Producción: 
 

Error: custom error

Navegadores compatibles: los navegadores compatibles con el método handler.setPrototypeOf() se enumeran a continuación: 
 

  • Google Chrome 49 y superior
  • Borde 12 y superior
  • Firefox 49 y superior
  • Ópera 36 y superior
  • Safari 10 y superior

Publicación traducida automáticamente

Artículo escrito por SHUBHAMSINGH10 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *