Object.prototype.__lookupSetter__()

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

참고: 이 기능은 Object.getOwnPropertyDescriptor() API 사용을 선호하기 때문에 더 이상 사용되지 않습니다. 이 메서드의 동작은 웹 호환성을 위해서만 명시되며 모든 플랫폼에서 구현할 필요는 없습니다. 모든 곳에서 작동하지 않을 수도 있습니다.

Object 인스턴스의 __lookupSetter__() 메서드는 지정된 속성에 설정자로 바인딩된 함수를 반환합니다.

구문

js
__lookupSetter__(prop)

매개변수

prop

반환되어야 할 설정자 속성의 이름이 포함된 문자열.

반환 값

지정된 속성에 설정자로 바인딩된 함수를 반환합니다. 해당 속성을 찾을 수 없거나 해당 속성이 데이터 속성이면 undefined를 반환합니다.

설명

Object.prototype을 상속받는 모든 객체들(즉, null-프로토타입 객체를 제외한 모든 객체)은 __lookupSetter__() 메서드를 상속받습니다. 객체의 속성에 대해 설정자가 정의되어 있다면, 해당 속성을 통해 설정자 함수를 직접 참조하는 것은 불가능합니다. 왜냐하면 그 속성은 값이 설정될 때만 함수를 호출하기 때문입니다. __lookupSetter__()는 설정자 함수에 대한 참조를 얻는 데 사용될 수 있습니다.

__lookupSetter__() 메서드는 프로토타입 체인을 따라 올라가며 지정된 속성을 찾습니다. 프로토타입 체인 상의 어떤 객체가 지정된 고유 속성을 가지고 있다면, 해당 속성의 속성 설명자set 속성이 반환됩니다. 만약 그 속성이 데이터 속성이라면, undefined가 반환됩니다. 전체 프로토타입 체인을 따라 속성을 찾지 못한 경우에도 undefined가 반환됩니다.

__lookupSetter__() 메서드는 명세서에서 "규범적 선택사항(normative optional)"으로 정의되어 있습니다. 이는 모든 구현체가 이 메서드를 반드시 구현할 필요는 없다는 의미입니다. 그러나 모든 주요 브라우저들이 이를 구현하고 있으며, 지속적인 사용으로 인해 앞으로 제거될 가능성은 낮습니다. 만약 브라우저가 __lookupSetter__()를 구현한다면, __lookupGetter__(), __defineGetter__(), 그리고 __defineSetter__() 메서드도 함께 구현해야 합니다.

예제

__lookupSetter__() 사용하기

js
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()를 사용하여 직접 구현할 수 있습니다.

js
const obj = {
  set foo(value) {
    this.bar = value;
  },
};

Object.getOwnPropertyDescriptor(obj, "foo").set;
// [Function: set foo]
js
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

같이 보기