Object.prototype.__lookupSetter__()
已弃用:此特性不再推荐。虽然某些浏览器可能仍然支持它,但它可能已经从相关的网络标准中删除,可能正在删除过程中,或者可能仅为兼容性目的而保留。请避免使用它,如果可能,请更新现有代码;请参阅本页底部的兼容性表格以指导您的决策。请注意,此特性可能随时停止工作。
注意: 此功能已弃用,请改用 Object.getOwnPropertyDescriptor() API。此方法的行为仅为兼容 Web 而指定,平台可以不实现。它可能无法在所有地方正常工作。
__lookupSetter__() 方法是 Object 实例上用于返回绑定到指定属性的 setter 函数的方法。
语法
__lookupSetter__(prop)
参数
prop-
一个包含要返回其 setter 的属性名称的字符串。
返回值
绑定到指定属性的 setter 函数。如果未找到该属性,或者该属性是 数据属性,则返回 undefined。
描述
所有继承自 Object.prototype 的对象(即除 null-prototype 对象之外的所有对象)都继承 __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-prototype 对象,这些对象不继承自 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, prop);
if (desc) {
return desc.set;
}
obj = Object.getPrototypeOf(obj);
}
}
console.log(findSetter(obj2, "foo")); // [Function: set foo]
规范
| 规范 |
|---|
| ECMAScript® 2026 语言规范 # sec-object.prototype.__lookupSetter__ |
浏览器兼容性
加载中…