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 Language Specification
# sec-object.prototype.__defineSetter__

브라우저 호환성

BCD tables only load in the browser

같이 보기