MENU
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>