Object.prototype.__lookupGetter__()

已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。

注意:此功能已棄用,應優先使用 Object.getOwnPropertyDescriptor() API。此方法的行為僅為 Web 相容性指定,並非平臺必須實現。它可能無法在所有地方都正常工作。

__lookupGetter__() 方法用於 Object 例項,它返回繫結到指定屬性的 getter 函式。

語法

js
__lookupGetter__(prop)

引數

prop

一個包含要返回其 getter 的屬性名稱的字串。

返回值

繫結到指定屬性的 getter 函式。如果找不到該屬性,或者該屬性是 資料屬性,則返回 undefined

描述

所有繼承自 Object.prototype 的物件(即除了 null-prototype 物件之外的所有物件)都繼承了 __lookupGetter__() 方法。如果為物件的屬性定義了 getter,則無法透過該屬性引用 getter 函式,因為該屬性會引用該函式的返回值。__lookupGetter__() 可用於獲取對 getter 函式的引用。

__lookupGetter__() 會沿著 原型鏈 向上查詢指定的屬性。如果原型鏈上的任何物件擁有指定的 自有屬性,則返回該屬性的 屬性描述符get 屬性。如果該屬性是資料屬性,則返回 undefined。如果在整個原型鏈上都未找到該屬性,也將返回 undefined

__lookupGetter__() 在規範中被定義為“規範可選”,這意味著沒有實現是必須實現此功能的。然而,所有主流瀏覽器都實現了它,並且由於其持續的使用,不太可能被移除。如果瀏覽器實現了 __lookupGetter__(),它還需要實現 __lookupSetter__()__defineGetter__()__defineSetter__() 方法。

示例

使用 __lookupGetter__()

js
const obj = {
  get foo() {
    return Math.random() > 0.5 ? "foo" : "bar";
  },
};

obj.__lookupGetter__("foo");
// [Function: get foo]

以標準方式查詢屬性的 getter

您應該使用 Object.getOwnPropertyDescriptor() API 來查詢屬性的 getter。與 __lookupGetter__() 相比,此方法允許查詢 Symbol 屬性。Object.getOwnPropertyDescriptor() 方法也適用於 null-prototype 物件,這些物件不繼承自 Object.prototype,因此沒有 __lookupGetter__() 方法。如果 __lookupGetter__() 沿原型鏈查詢的行為對您很重要,您可以使用 Object.getPrototypeOf() 自己實現它。

js
const obj = {
  get foo() {
    return Math.random() > 0.5 ? "foo" : "bar";
  },
};

Object.getOwnPropertyDescriptor(obj, "foo").get;
// [Function: get foo]
js
const obj2 = {
  __proto__: {
    get foo() {
      return Math.random() > 0.5 ? "foo" : "bar";
    },
  },
};

function findGetter(obj, prop) {
  while (obj) {
    const desc = Object.getOwnPropertyDescriptor(obj, prop);
    if (desc) {
      return desc.get;
    }
    obj = Object.getPrototypeOf(obj);
  }
}

console.log(findGetter(obj2, "foo")); // [Function: get foo]

規範

規範
ECMAScript® 2026 語言規範
# sec-object.prototype.__lookupGetter__

瀏覽器相容性

另見