Object.prototype.__defineSetter__()

지원이 중단되었습니다: 이 기능은 더 이상 권장되지 않습니다. 일부 브라우저에서는 아직 지원할 수 있지만 관련 웹 표준에서 이미 제거되었거나 제거 과정에 있는 경우가 있으며, 호환성을 위해 유지되고 있을 수 있습니다. 사용을 피하고 가능하다면 기존 코드를 업데이트하세요. 결정을 지원할 하단의 호환성 표를 확인하세요. 이 기능은 언제든지 작동을 중단할 수 있음을 유의하세요.

참고 : 이 기능은 객체 초기자 구문 또는 Object.defineProperty() API를 사용하여 설정자 정의하는 것을 권장하기 때문에 이 기능은 더 이상 사용되지 않습니다. 이 메서드의 동작은 웹 호환성을 위해서만 명시되며 모든 플랫폼에서 구현할 필요는 없습니다.모든 환경에서 작동하지 않을 수도 있습니다.

Object 인스턴스의 __defineSetter__() 메서드는 해당 속성을 설정하려고 시도할 때 호출될 함수에 객체의 속성을 바인딩합니다.

구문

js
__defineSetter__(prop, func)

매개변수

prop

설정자 func가 바인딩된 속성의 이름이 포함된 문자열입니다.

func

지정된 속성을 설정하려고 할 때 호출되는 함수입니다. 이 함수는 다음 매개변수를 받습니다.

val

prop에 할당하려고 한 값입니다.

반환 값

없음 (undefined).

예외

TypeError

func가 함수가 아닐 경우 발생합니다.

설명

Object.prototype에서 상속하는 모든 객체(즉, null-프로토타입 객체를 제외한 모든 객체)는 __defineSetter__() 메서드를 상속합니다. 이 메서드를 사용하면 기존 객체에 설정자를 정의할 수 있습니다. 이는 [Object.defineProperty(obj, prop, { set: func, configurable: true, enumerable: true })]와 동일하며, 이는 속성이 열거 가능하고 구성 가능하며 기존 접근자가 있는 경우 보존됨을 의미합니다.

__defineSetter__()는 명세서에서 "권장 선택 사항"으로 정의되어 있으므로 반드시 구현할 필요가 없습니다. 그러나 모든 주요 브라우저에서 구현하고 있으며 계속 사용되고 있기 때문에 제거될 가능성은 낮습니다. 브라우저가 __defineSetter__()를 구현했다면, __lookupGetter__(), __lookupSetter__(), __defineGetter__() 구현이 필요합니다.

예제

__defineSetter__() 사용하기

js
const o = {};
o.__defineSetter__("value", function (val) {
  this.anotherValue = val;
});
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

표준 방식으로 설정자 속성 정의하기

객체가 처음 초기화될 때 set 구문을 사용하여 설정자를 정의할 수 있습니다.

js
const o = {
  set value(val) {
    this.anotherValue = val;
  },
};
o.value = 5;
console.log(o.value); // undefined
console.log(o.anotherValue); // 5

객체가 생성된 후 Object.defineProperty()를 사용하여 객체에 설정자를 정의할 수도 있습니다. 이 메서드는 __defineSetter__()와 비교하여 설정자의 열거 가능성과 구성 가능성을 제어할 수 있을 뿐만 아니라 심볼 속성을 정의할 수 있습니다. Object.defineProperty() 메서드는 Object.prototype에서 상속되지 않으므로 __defineSetter__() 메서드가 없는 null-프로토타입 객체에서도 작동합니다.

js
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

명세서

Specification
ECMAScript® 2025 Language Specification
# sec-object.prototype.__defineSetter__

브라우저 호환성

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
__defineSetter__
Deprecated

Legend

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

Full support
Full support
Deprecated. Not for use in new websites.
See implementation notes.

같이 보기