Object.prototype.__lookupSetter__()
已弃用: 不再推荐使用该特性。虽然一些浏览器仍然支持它,但也许已从相关的 web 标准中移除,也许正准备移除或出于兼容性而保留。请尽量不要使用该特性,并更新现有的代码;参见本页面底部的兼容性表格以指导你作出决定。请注意,该特性随时可能无法正常工作。
备注:
该方法已被弃用,建议使用 Object.getOwnPropertyDescriptor()
API。该方法的行为只针对 Web 兼容性进行了规定,在任何平台上都不需要实现该方法。它可能无法在所有地方正常工作。
__lookupGetter__()
方法返回绑定到指定属性的 setter 函数。
语法
__lookupSetter__(prop)
参数
prop
-
包含应返回其 setter 的属性名称的字符串。
返回值
绑定到指定属性的 setter 函数。如果找不到这样的属性或者该属性是数据属性,则返回 undefined
。
描述
所有继承自 Object.prototype
的对象(也就是除了 null
原型对象的对象)都会继承 __lookupSetter__()
方法。如果为对象的属性定义了一个 setter,则无法通过该属性引用 setter 函数,因为该属性引用该函数的返回值。__lookupSetter__()
可用于获取对 setter 函数的引用。
__lookupSetter__()
沿着原型链向上查找指定的属性。如果原型链上的任何对象具有指定的自有属性,则返回该属性的属性描述符的 set
属性。如果该属性是数据属性,则返回 undefined
。如果在整个原型链上都找不到该属性,也同样返回 undefined
。
__lookupSetter__()
在规范中被定义为“可选规范”,这意味着不需要任何实现来实现它。然而,所有主要的浏览器都实现了它,并且由于它的持续使用,它不太可能被删除。如果浏览器实现了 __lookupSetter__()
,它还需要实现 __lookupGetter__()
、__defineGetter__()
和 __defineSetter__()
方法。
示例
使用 __lookupSetter__()
const obj = {
set foo(value) {
this.bar = value;
},
};
obj.__lookupSetter__("foo");
// [Function: set foo]
以标准方式查找属性的 setter
你应该使用 Object.getOwnPropertyDescriptor()
API 来查找属性的 setter。与 __lookupSetter__()
相比,该方法允许查找 Symbol 属性。Object.getOwnPropertyDescriptor()
方法还适用于 null
原型对象,它们不继承自 Object.prototype
,因此没有 __lookupSetter__()
方法。如果 __lookupSetter__()
沿着原型链向上查找属性的行为很重要,则可以使用 Object.getPrototypeOf()
自行实现它。
const obj = {
set foo(value) {
this.bar = value;
},
};
Object.getOwnPropertyDescriptor(obj, "foo").set;
// [Function: set foo]
const obj2 = {
__proto__: {
set foo(value) {
this.bar = value;
},
},
};
function findSetter(obj, prop) {
while (obj) {
const desc = Object.getOwnPropertyDescriptor(obj, "foo");
if (desc) {
return desc.set;
}
obj = Object.getPrototypeOf(obj);
}
}
console.log(findSetter(obj2, "foo")); // [Function: set foo]
规范
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.__lookupSetter__ |
浏览器兼容性
BCD tables only load in the browser