Handlers For Object.X()

.defineProperty()

A trap for Object.defineProperty.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var p = new Proxy({}, {
   defineProperty: function(target, prop, descriptor) {
      Reflect.defineProperty(target,prop,descriptor);
      console.log('called: ' + prop);
      return true;
   }});Object.defineProperty(p, 'a', {configurable:true,
                         enumerable:true, value:10}); // "called: a"console.log(Object.getOwnPropertyDescriptor(p,'a'));  // {value: 10, writable: false, enumerable: true, //
  configurable: true}

</script></body><html>

.ownKeys()

A trap for Object.keys, Object.getOwnPropertyNames and Object.getOwnPropertySymbols.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var p = new Proxy({}, {
   ownKeys: function(target) {
      console.log('called');
      return ['a', 'b', 'c'];
   }});console.log(Object.getOwnPropertyNames(p)); // called                                                               // [ 'a', 'b', 'c' ]

</script></body><html>

.getOwnPropertyDescriptor()

A trap for Object.getOwnPropertyDescriptor.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var p = new Proxy({a:2}, {
   getOwnPropertyDescriptor: function(target, prop) {
      console.log('called: ' + prop);
      return { configurable: true, enumerable: true,
                    value: 1};
   }});console.log(Object.getOwnPropertyDescriptor(p, 'a').value); // called: a// 1

</script></body><html>

.preventExtensions()

A trap for Object.preventExtensions.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var p = new Proxy({}, {
   preventExtensions: function(target) {
      Object.preventExtensions(target);
      return true;
   }});p.a=100console.log(Object.preventExtensions(p));  // Proxy {}p.b=200;console.log(p.a,p.b);  // 100 undefined

</script></body><html>

.isExtensible()

A trap for Object.isExtensible.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var p = new Proxy({}, {
   isExtensible: function(target) {
      console.log('called');
      return true;
   }});console.log(Object.isExtensible(p)); // "called"                                                     // true

</script></body><html>

.getPrototypeOf()

A trap for instanceof,Object.getPrototypeOf, Object.prototype.isPrototypeOf, and __proto__.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var obj = {};var p = new Proxy(obj, {
    getPrototypeOf(target) {
        return Array.prototype;
    }});console.log(
    Object.getPrototypeOf(p) === Array.prototype,  // true
    Reflect.getPrototypeOf(p) === Array.prototype,  // true
    p.__proto__ === Array.prototype,                     // true
    Array.prototype.isPrototypeOf(p),                       // true
    p instanceof Array                                             // true);

</script></body><html>

.setPrototypeOf()

A trap for Object.setPrototypeOf.


RESETRUNFULL
<!DOCTYPE html><html><body><script>

var handler= {
    setPrototypeOf(target, newProto) {
        return false;
    }};var newProto = {}, target = {};var p = new Proxy({}, handler);Reflect.setPrototypeOf(p, newProto); // returns falseObject.setPrototypeOf(p, newProto); // throws a TypeError

</script></body><html>