Object.prototype.__lookupSetter__()

已弃用: 不再推荐使用该特性。虽然一些浏览器仍然支持它,但也许已从相关的 web 标准中移除,也许正准备移除或出于兼容性而保留。请尽量不要使用该特性,并更新现有的代码;参见本页面底部的兼容性表格以指导你作出决定。请注意,该特性随时可能无法正常工作。

备注: 该方法已被弃用,建议使用 Object.getOwnPropertyDescriptor() API。该方法的行为只针对 Web 兼容性进行了规定,在任何平台上都不需要实现该方法。它可能无法在所有地方正常工作。

__lookupGetter__() 方法返回绑定到指定属性的 setter 函数。

语法

js
__lookupSetter__(prop)

参数

prop

包含应返回其 setter 的属性名称的字符串。

返回值

绑定到指定属性的 setter 函数。如果找不到这样的属性或者该属性是数据属性,则返回 undefined

描述

所有继承自 Object.prototype 的对象(也就是除了 null 原型对象的对象)都会继承 __lookupSetter__() 方法。如果为对象的属性定义了一个 setter,则无法通过该属性引用 setter 函数,因为该属性引用该函数的返回值。__lookupSetter__() 可用于获取对 setter 函数的引用。

__lookupSetter__() 沿着原型链向上查找指定的属性。如果原型链上的任何对象具有指定的自有属性,则返回该属性的属性描述符set 属性。如果该属性是数据属性,则返回 undefined。如果在整个原型链上都找不到该属性,也同样返回 undefined

__lookupSetter__() 在规范中被定义为“可选规范”,这意味着不需要任何实现来实现它。然而,所有主要的浏览器都实现了它,并且由于它的持续使用,它不太可能被删除。如果浏览器实现了 __lookupSetter__(),它还需要实现 __lookupGetter__()__defineGetter__()__defineSetter__() 方法。

示例

使用 __lookupSetter__()

js
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() 自行实现它。

js
const obj = {
  set foo(value) {
    this.bar = value;
  },
};

Object.getOwnPropertyDescriptor(obj, "foo").set;
// [Function: set foo]
js
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® 2025 Language Specification
# sec-object.prototype.__lookupSetter__

浏览器兼容性

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
Node.js
__lookupSetter__
Deprecated

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Deprecated. Not for use in new websites.

参见