Object.prototype.__lookupSetter__()
지원이 중단되었습니다: 이 기능은 더 이상 권장되지 않습니다. 일부 브라우저에서는 아직 지원할 수 있지만 관련 웹 표준에서 이미 제거되었거나 제거 과정에 있는 경우가 있으며, 호환성을 위해 유지되고 있을 수 있습니다. 사용을 피하고 가능하다면 기존 코드를 업데이트하세요. 결정을 지원할 하단의 호환성 표를 확인하세요. 이 기능은 언제든지 작동을 중단할 수 있음을 유의하세요.
참고 :
이 기능은 Object.getOwnPropertyDescriptor()
API 사용을 선호하기 때문에 더 이상 사용되지 않습니다. 이 메서드의 동작은 웹 호환성을 위해서만 명시되며 모든 플랫폼에서 구현할 필요는 없습니다. 모든 곳에서 작동하지 않을 수도 있습니다.
Object
인스턴스의 __lookupSetter__()
메서드는 지정된 속성에 설정자로 바인딩된 함수를 반환합니다.
구문
__lookupSetter__(prop)
매개변수
prop
-
반환되어야 할 설정자 속성의 이름이 포함된 문자열.
반환 값
지정된 속성에 설정자로 바인딩된 함수를 반환합니다. 해당 속성을 찾을 수 없거나 해당 속성이 데이터 속성이면 undefined
를 반환합니다.
설명
Object.prototype
을 상속받는 모든 객체들(즉, null
-프로토타입 객체를 제외한 모든 객체)은 __lookupSetter__()
메서드를 상속받습니다. 객체의 속성에 대해 설정자가 정의되어 있다면, 해당 속성을 통해 설정자 함수를 직접 참조하는 것은 불가능합니다. 왜냐하면 그 속성은 값이 설정될 때만 함수를 호출하기 때문입니다. __lookupSetter__()
는 설정자 함수에 대한 참조를 얻는 데 사용될 수 있습니다.
__lookupSetter__()
메서드는 프로토타입 체인을 따라 올라가며 지정된 속성을 찾습니다. 프로토타입 체인 상의 어떤 객체가 지정된 고유 속성을 가지고 있다면, 해당 속성의 속성 설명자 의 set
속성이 반환됩니다. 만약 그 속성이 데이터 속성이라면, undefined
가 반환됩니다. 전체 프로토타입 체인을 따라 속성을 찾지 못한 경우에도 undefined
가 반환됩니다.
__lookupSetter__()
메서드는 명세서에서 "규범적 선택사항(normative optional)"으로 정의되어 있습니다. 이는 모든 구현체가 이 메서드를 반드시 구현할 필요는 없다는 의미입니다. 그러나 모든 주요 브라우저들이 이를 구현하고 있으며, 지속적인 사용으로 인해 앞으로 제거될 가능성은 낮습니다. 만약 브라우저가 __lookupSetter__()
를 구현한다면, __lookupGetter__()
, __defineGetter__()
, 그리고 __defineSetter__()
메서드도 함께 구현해야 합니다.
예제
__lookupSetter__() 사용하기
const obj = {
set foo(value) {
this.bar = value;
},
};
obj.__lookupSetter__("foo");
// [Function: set foo]
표준 방법으로 속성의 설정자 검색하기
속성의 설정자를 찾을 때는 Object.getOwnPropertyDescriptor()
API를 사용해야 합니다. __lookupSetter__()
와 비교하자면, 이 메서드는 심볼 속성도 찾을 수 있습니다. Object.getOwnPropertyDescriptor()
메서드는 또한 null
-프로토타입 객체에서도 작동합니다. 이러한 객체들은 Object.prototype
을 상속받지 않아 __lookupSetter__()
메서드를 가지고 있지 않습니다. 만약 __lookupSetter__()
의 프로토타입 체인을 따라 올라가는 동작이 중요하다면, Object.getPrototypeOf()
를 사용하여 직접 구현할 수 있습니다.
const obj = {
set foo(value) {
this.bar = value;
},
};
Object.getOwnPropertyDescriptor(obj, "foo").set;
// [Function: set foo]
const obj2 = {
__proto__: {
set foo(value) {
this.bar = value;
},
},
};
function findSetter(obj, prop) {
while (obj) {
const desc = Object.getOwnPropertyDescriptor(obj, prop);
if (desc) {
return desc.set;
}
obj = Object.getPrototypeOf(obj);
}
}
console.log(findSetter(obj2, "foo")); // [Function: set foo]
명세서
Specification |
---|
ECMAScript Language Specification # sec-object.prototype.__lookupSetter__ |
브라우저 호환성
BCD tables only load in the browser