文章导航

Proxy handler.getOwnPropertyDescriptor() 方法

2019-4-15 10:51| 作者: admin| 查看: 218| 评论: 0|来自: 蚂蚁部落

关于Proxy更多内容可以参阅Proxy和Reflect一章节。

此方法能够拦截Object.getOwnPropertyDescriptor()操作。

返回值是对象或者undefined。

语法结构:

[JavaScript] 纯文本查看 复制代码
var p = new Proxy(target, {
  getOwnPropertyDescriptor: function (target, prop) {
    //code
  }
})

参数解析:

(1).target:可选,被代理的目标对象。

(2).prop:可选,要获取特性描述的属性名称。

特别说明:

(1).如果返回值不是对象或者undefined会报错。

(2).如果target对象自有属性是不可配置,那么返回值不能是undefined,否则会报错。

(3).如果target对象是不可扩展的,那么返回值不能是undefined,否则会报错。

(4).如果对象是不可扩展且指定属性不是对象自有,那么返回值必须是undefined,否则会报错。

(5).如果属性不是对象的自有属性,或者此属性是对象可配置自有属性,那么返回属性描述对象configurable属性值必须为true,否则报错。

代码实例:

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  url:"www.softwhy.com"
}
var p = new Proxy(antzone, {
  getOwnPropertyDescriptor: function(target, prop) {
    console.log(prop);
    return { configurable: true, enumerable: true, value: "antzone" };
  }
});
Object.getOwnPropertyDescriptor(p, "webName");

上面代码可以拦截Object.getOwnPropertyDescriptor()操作,返回一个自定义的属性特性描述对象。

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  url:"www.softwhy.com"
}
var p = new Proxy(antzone, {
  getOwnPropertyDescriptor: function(target, prop) {
    console.log(prop);
    return { configurable: true, enumerable: true, value: "antzone" };
  }
});
Reflect.getOwnPropertyDescriptor(p, "webName");

上面代码拦截Reflect.getOwnPropertyDescriptor()操作,返回返回一个自定义的属性特性描述对象。

[JavaScript] 纯文本查看 复制代码运行代码
let antzone = {
  webName: "蚂蚁部落",
  url:"www.softwhy.com"
}
Object.defineProperty(antzone, "webName", {
  writable: true,
  enumerable: true,
  configurable: false
})
var p = new Proxy(antzone, {
  getOwnPropertyDescriptor: function(target, prop) {
    console.log(prop);
    return undefined;
  }
});
Reflect.getOwnPropertyDescriptor(p, "webName");

代码会报错,因为antzone的webName属性是不可扩展的。

而handler.getOwnPropertyDescriptor()返回值是undefined。


鲜花

握手

雷人

路过

鸡蛋

最新评论

返回顶部