Object.prototype.__lookupGetter__()
已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。
注意:此功能已棄用,應優先使用 Object.getOwnPropertyDescriptor() API。此方法的行為僅為 Web 相容性指定,並非平臺必須實現。它可能無法在所有地方都正常工作。
__lookupGetter__() 方法用於 Object 例項,它返回繫結到指定屬性的 getter 函式。
語法
__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__()
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() 自己實現它。
const obj = {
get foo() {
return Math.random() > 0.5 ? "foo" : "bar";
},
};
Object.getOwnPropertyDescriptor(obj, "foo").get;
// [Function: get foo]
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__ |
瀏覽器相容性
載入中…