[ Web Proxy ]
URL:
Viewing: https://developer.mozilla.org/ru/docs/Web/JavaScript/Guide/Meta_programming [Back]  [Original]

- - JavaScript | MDN

This page was translated from English by the community. Learn more and join the MDN Web Docs community.

View in English Always switch to English

-

ECMAScript 2015, JavaScript Proxy Reflect, ( , , , ). JavaScript.

In this article

Proxy

ECMAScript 6, Proxy . , :

js
var handler = {
  get: function (target, name) {
    return name in target ? target[name] : 42;
  },
};
var p = new Proxy({}, handler);
p.a = 1;
console.log(p.a, p.b); // 1, 42

Proxy target ( ) handler - - get. "" , undefined, 42.

Proxy.

Proxy :

handler ()

- , -.

(traps)

, . (hooking) .

(target)

, Proxy. Proxy . (invariants), .

( Invariants - )

, invariants. , TypeError.

, Proxy. .

/
handler.getPrototypeOf() Object.getPrototypeOf()
Reflect.getPrototypeOf()
__proto__
Object.prototype.isPrototypeOf()
instanceof
  • getPrototypeOf object null.
  • target , Object.getPrototypeOf(proxy) Object.getPrototypeOf(target).
handler.setPrototypeOf() Object.setPrototypeOf()
Reflect.setPrototypeOf()
target , prototype Object.getPrototypeOf(target).
handler.isExtensible() Object.isExtensible()
Reflect.isExtensible()
Object.isExtensible(proxy) , Object.isExtensible(target).
handler.preventExtensions() Object.preventExtensions()
Reflect.preventExtensions()
Object.preventExtensions(proxy) true , Object.isExtensible(proxy) false.
handler.getOwnPropertyDescriptor() Object.getOwnPropertyDescriptor()
Reflect.getOwnPropertyDescriptor()
  • getOwnPropertyDescriptor object undefined.
  • , , target.
  • , target target .
  • , target target .
  • , target , target.
  • Object.getOwnPropertyDescriptor(target) Object.defineProperty .
handler.defineProperty() Object.defineProperty()
Reflect.defineProperty()
  • , .
  • , , .
  • , , .
  • , Object.defineProperty(target, prop, descriptor) .
  • ("use strict";), defineProperty false, TypeError.
handler.has() Property query: foo in proxy
Inherited property query: foo in Object.create(proxy)
Reflect.has()
  • , .
  • , , .
handler.get() Property access: proxy[foo]and proxy.bar
Inherited property access: Object.create(proxy)[foo]
Reflect.get()
  • , , , , .
  • , , undefined, , undefined.
handler.set() Property assignment: proxy[foo] = bar and proxy.foo = bar
Inherited property assignment: Object.create(proxy)[foo] = bar
Reflect.set()
  • , , , .
  • , , , undefined.
  • , false set TypeError.
handler.deleteProperty() Property deletion: delete proxy[foo] and delete proxy.foo
Reflect.deleteProperty()
, , .
handler.enumerate() Property enumeration / for...in: for (var name in proxy) {...}
Reflect.enumerate()
enumerate .
handler.ownKeys() Object.getOwnPropertyNames()
Object.getOwnPropertySymbols()
Object.keys()
Reflect.ownKeys()
handler.apply() proxy(..args)
Function.prototype.apply() and Function.prototype.call()
Reflect.apply()
.
handler.construct() new proxy(...args)
Reflect.construct()
Object.

Proxy

Proxy.revocable() Proxy. revoke, -. TypeError.

js
var revocable = Proxy.revocable(
  {},
  {
    get: function (target, name) {
      return "[[" + name + "]]";
    },
  },
);
var proxy = revocable.proxy;
console.log(proxy.foo); // "[[foo]]"

revocable.revoke();

console.log(proxy.foo); //  TypeError
proxy.foo = 1; //   TypeError
delete proxy.foo; //  TypeError
typeof proxy; // "object",   typeof  

Reflect , JavaScript. , Proxy. Reflect .

Reflect .

, Reflect.has() in :

js
Reflect.has(Object, "assign"); // true

apply

ES5 Function.prototype.apply() ( this) , ( - ).

js
Function.prototype.apply.call(Math.floor, undefined, [1.75]);

Reflect.apply :

js
Reflect.apply(Math.floor, undefined, [1.75]);
// 1;

Reflect.apply(String.fromCharCode, undefined, [104, 101, 108, 108, 111]);
// "hello"

Reflect.apply(RegExp.prototype.exec, /ab/, ["confabulation"]).index;
// 4

Reflect.apply("".charAt, "ponies", [3]);
// "i"

Object.defineProperty, , , TypeError. - try...catch . Reflect.defineProperty, , , if...else :

js
if (Reflect.defineProperty(target, property, attributes)) {
  // 
} else {
  // -   
}

Web Proxy Viewer  |  New URL  |  Original Page