首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Proxy.handler.setPrototypeOf

handler.setPrototypeOf()方法主要用来拦截Object.setPrototypeOf().

语法

代码语言:javascript
复制
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()

约束

如果违反了下列规则,则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, Object.setPrototypeOf() will create and throw a TypeError itself.? If the mutation is performed by an operation that doesn't ordinarily throw in case of failure, such as 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 falseThe 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")SpecificationsSpecificationStatusCommentECMAScript 2015 (6th Edition, ECMA-262)The definition of '[SetPrototypeOf]' in that specification.StandardInitial definition.ECMAScript 2017 Draft (ECMA-262)The definition of '[SetPrototypeOf]' in that specification.Draft?Browser compatibilityFeatureChromeFirefox (Gecko)Internet ExplorerOperaSafariBasic support?49 (49)???FeatureAndroidChrome for AndroidFirefox Mobile (Gecko)IE MobileOpera MobileSafari MobileBasic support??49.0 (49)???See also

扫码关注腾讯云开发者

领取腾讯云代金券

http://www.vxiaotou.com