Object.prototype.__defineSetter__()
지원이 중단되었습니다: 이 기능은 더 이상 권장되지 않습니다. 일부 브라우저에서는 아직 지원할 수 있지만 관련 웹 표준에서 이미 제거되었거나 제거 과정에 있는 경우가 있으며, 호환성을 위해 유지되고 있을 수 있습니다. 사용을 피하고 가능하다면 기존 코드를 업데이트하세요. 결정을 지원할 하단의 호환성 표를 확인하세요. 이 기능은 언제든지 작동을 중단할 수 있음을 유의하세요.
참고 :
이 기능은 객체 초기자 구문 또는 Object.defineProperty()
API를 사용하여 설정자 정의하는 것을 권장하기 때문에 이 기능은 더 이상 사용되지 않습니다. 이 메서드의 동작은 웹 호환성을 위해서만 명시되며 모든 플랫폼에서 구현할 필요는 없습니다.모든 환경에서 작동하지 않을 수도 있습니다.
Object
인스턴스의 __defineSetter__()
메서드는 해당 속성을 설정하려고 시도할 때 호출될 함수에 객체의 속성을 바인딩합니다.
구문
__defineSetter__(prop, func)
매개변수
반환 값
없음 (undefined
).
예외
TypeError
-
func
가 함수가 아닐 경우 발생합니다.
설명
Object.prototype
에서 상속하는 모든 객체(즉, null
-프로토타입 객체를 제외한 모든 객체)는 __defineSetter__()
메서드를 상속합니다. 이 메서드를 사용하면 기존 객체에 설정자를 정의할 수 있습니다. 이는 [Object.defineProperty(obj, prop, { set: func, configurable: true, enumerable: true })
]와 동일하며, 이는 속성이 열거 가능하고 구성 가능하며 기존 접근자가 있는 경우 보존됨을 의미합니다.
__defineSetter__()
는 명세서에서 "권장 선택 사항"으로 정의되어 있으므로 반드시 구현할 필요가 없습니다. 그러나 모든 주요 브라우저에서 구현하고 있으며 계속 사용되고 있기 때문에 제거될 가능성은 낮습니다. 브라우저가 __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
표준 방식으로 설정자 속성 정의하기
객체가 처음 초기화될 때 set
구문을 사용하여 설정자를 정의할 수 있습니다.
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
-프로토타입 객체에서도 작동합니다.
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