Firefox Tomorrow

javascript instance method

Object.prototype.__lookupGetter__()

View on MDN ↗

[!NOTE] This feature is deprecated in favor of the getOwnPropertyDescriptor() API. This method’s behavior is only specified for web compatibility, and is not required to be implemented in any platform. It may not work everywhere.

The __lookupGetter__() method of Object instances returns the function bound as a getter to the specified property.

Syntax

__lookupGetter__(prop)

Parameters

  • prop
    • : A string containing the name of the property whose getter should be returned.

Return value

The function bound as a getter to the specified property. Returns undefined if no such property is found, or the property is a data property.

Description

All objects that inherit from Object.prototype (that is, all except null-prototype objects) inherit the __lookupGetter__() method. If a getter has been defined for an object’s property, it’s not possible to reference the getter function through that property, because that property refers to the return value of that function. __lookupGetter__() can be used to obtain a reference to the getter function.

__lookupGetter__() walks up the prototype chain to find the specified property. If any object along the prototype chain has the specified own property, the get attribute of the property descriptor for that property is returned. If that property is a data property, undefined is returned. If the property is not found along the entire prototype chain, undefined is also returned.

__lookupGetter__() is defined in the spec as “normative optional”, which means no implementation is required to implement this. However, all major browsers implement it, and due to its continued usage, it’s unlikely to be removed. If a browser implements __lookupGetter__(), it also needs to implement the __lookupSetter__(), __defineGetter__(), and __defineSetter__() methods.

Examples

Using __lookupGetter__()

const obj = {
  get foo() {
    return Math.random() > 0.5 ? "foo" : "bar";
  },
};

obj.__lookupGetter__("foo");
// [Function: get foo]

Looking up a property’s getter in the standard way

You should use the getOwnPropertyDescriptor() API to look up a property’s getter. Compared to __lookupGetter__(), this method allows looking up symbol properties. The Object.getOwnPropertyDescriptor() method also works with null-prototype objects, which don’t inherit from Object.prototype and therefore don’t have the __lookupGetter__() method. If __lookupGetter__()’s behavior of walking up the prototype chain is important, you may implement it yourself with 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]

Specifications

SpecificationsStandards references are available on the canonical MDN page.

Browser compatibility

Browser compatibilityCompatibility data is available on the canonical MDN page.

See also