handler.setPrototypeOf() - JavaScript Proxy 对象
handler.setPrototypeOf()
handler.setPrototypeOf()
方法主要用来拦截Object.setPrototypeOf()
.
语法
var p = new Proxy(target, { setPrototypeOf: function(target, prototype) { } });
参数
以下参数传递给setPrototypeOf
方法.
target
被拦截目标对象.prototype
对象新原型或为null
.返回值
如果成功修改了[[Prototype]]
,setPrototypeOf
方法返回true
,否则返回false
.
描述
这个handler.setPrototypeOf
方法用于拦截Object.setPrototypeOf()
.
拦截
这个方法可以拦截以下操作:
Object.setPrototypeOf()
Reflect.setPrototypeOf()
Invariants
如果违反了下列规则,则proxy将抛出一个TypeError
:
如果 target
不可扩展,原型参数必须与Object.getPrototypeOf(target)
的值相同.
示例
如果你不想为你的对象设置一个新的原型,你的handler's的setPrototypeOf
方法可以返回false,也可以抛出异常。
The former approach means that any operation that performs such mutation, that throws an exception on failure to mutate, will have to create the exception itself. For example,Reflect.setPrototypeOf()
, no exception will be thrown.
var handlerReturnsFalse = { setPrototypeOf(target, newProto) { return false; } }; var newProto = {}, target = {}; var p1 = new Proxy(target, handlerReturnsFalse); Object.setPrototypeOf(p1, newProto); // throws a TypeError Reflect.setPrototypeOf(p1, newProto); // returns false
The latter approach will cause any operation that attempts to mutate, to throw. This approach is required if you want even non-throwing operations to throw on failure, or you want to throw a custom exception value.
var handlerThrows = { setPrototypeOf(target, newProto) { throw new Error('custom error'); } }; var newProto = {}, target = {}; var p2 = new Proxy(target, handlerThrows); Object.setPrototypeOf(p2, newProto); // throws new Error("custom error") Reflect.setPrototypeOf(p2, newProto); // throws new Error("custom error")
鹏仔微信 15129739599 鹏仔QQ344225443 鹏仔前端 pjxi.com 共享博客 sharedbk.com
图片声明:本站部分配图来自网络。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!