Object.prototype.__defineSetter__()
已棄用:此特性不再推薦。雖然某些瀏覽器可能仍然支援它,但它可能已經從相關的網路標準中刪除,可能正在刪除過程中,或者可能僅為相容性目的而保留。請避免使用它,如果可能,請更新現有程式碼;請參閱本頁底部的相容性表格以指導您的決策。請注意,此特性可能隨時停止工作。
注意: 此功能已棄用,建議使用 set 訪問器 或 Object.defineProperty() API 來定義訪問器。此方法的行為僅為 Web 相容性指定,不要求在任何平臺實現。它可能並非在所有地方都可用。
__defineSetter__() 方法用於 Object 例項,它將物件的屬性繫結到一個函式,當嘗試設定該屬性時,將呼叫該函式。
語法
__defineSetter__(prop, func)
引數
返回值
無(undefined)。
異常
TypeError-
如果
func不是函式,則丟擲該錯誤。
描述
所有繼承自 Object.prototype 的物件(即除 null-prototype 物件之外的所有物件)都繼承 __defineSetter__() 方法。此方法允許在現有物件上定義一個 setter。這等同於 Object.defineProperty(obj, prop, { set: func, configurable: true, enumerable: true }),這意味著該屬性是可列舉和可配置的,並且會保留任何現有的 getter(如果存在)。
__defineSetter__() 在規範中被定義為“規範可選” (normative optional),這意味著不需要任何實現來強制實現它。然而,所有主流瀏覽器都實現了它,並且由於其持續的使用,不太可能被移除。如果瀏覽器實現了 __defineSetter__(),它還需要實現 __lookupGetter__()、__lookupSetter__() 和 __defineGetter__() 方法。
示例
使用 __defineSetter__()
const o = {};
o.__defineSetter__("value", function (val) {
this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
以標準方式定義 setter 屬性
您可以在物件首次初始化時使用 set 語法來定義 setter。
const o = {
set value(val) {
this.anotherValue = val;
},
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
您也可以在物件建立後使用 Object.defineProperty() 在物件上定義 setter。與 __defineSetter__() 相比,此方法允許您控制 setter 的可列舉性和可配置性,以及定義 symbol 屬性。Object.defineProperty() 方法也適用於 null-prototype 物件,這些物件不繼承自 Object.prototype,因此沒有 __defineSetter__() 方法。
const o = {};
Object.defineProperty(o, "value", {
set(val) {
this.anotherValue = val;
},
configurable: true,
enumerable: true,
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5
規範
| 規範 |
|---|
| ECMAScript® 2026 語言規範 # sec-object.prototype.__defineSetter__ |
瀏覽器相容性
載入中…