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