Object.prototype.__lookupGetter__()

Deprecated: This feature is no longer recommended. Though some browsers might still support it, it may have already been removed from the relevant web standards, may be in the process of being dropped, or may only be kept for compatibility purposes. Avoid using it, and update existing code if possible; see the compatibility table at the bottom of this page to guide your decision. Be aware that this feature may cease to work at any time.

Note: Tính năng này đã bị loại bỏ và thay thế bằng API Object.getOwnPropertyDescriptor(). Hành vi của phương thức này chỉ được chỉ định nhằm đảm bảo tương thích web, và không bắt buộc phải được triển khai trên mọi nền tảng. Nó có thể không hoạt động ở mọi nơi.

Phương thức __lookupGetter__() của các thực thể Object trả về hàm được gắn làm getter cho thuộc tính được chỉ định.

Cú pháp

js
__lookupGetter__(prop)

Tham số

prop

Một chuỗi chứa tên của thuộc tính mà getter của nó cần được trả về.

Giá trị trả về

Hàm được gắn làm getter cho thuộc tính được chỉ định. Trả về undefined nếu không tìm thấy thuộc tính như vậy, hoặc thuộc tính là một data property.

Mô tả

Tất cả các đối tượng kế thừa từ Object.prototype (tức là tất cả ngoại trừ đối tượng có prototype là null) đều kế thừa phương thức __lookupGetter__(). Nếu một getter đã được định nghĩa cho thuộc tính của một đối tượng, thì không thể tham chiếu đến hàm getter thông qua thuộc tính đó, vì thuộc tính đó đề cập đến giá trị trả về của hàm đó. __lookupGetter__() có thể được sử dụng để lấy tham chiếu đến hàm getter.

__lookupGetter__() duyệt ngược lên prototype chain để tìm thuộc tính được chỉ định. Nếu bất kỳ đối tượng nào trong prototype chain có thuộc tính riêng được chỉ định, thuộc tính get của property descriptor cho thuộc tính đó sẽ được trả về. Nếu thuộc tính đó là data property, undefined được trả về. Nếu thuộc tính không được tìm thấy trong toàn bộ prototype chain, undefined cũng được trả về.

__lookupGetter__() được định nghĩa trong đặc tả là "normative optional", nghĩa là không có triển khai nào bắt buộc phải hỗ trợ nó. Tuy nhiên, tất cả các trình duyệt chính đều triển khai nó, và do việc sử dụng liên tục, nó khó có thể bị loại bỏ. Nếu một trình duyệt triển khai __lookupGetter__(), nó cũng cần triển khai các phương thức __lookupSetter__(), __defineGetter__(), và __defineSetter__().

Ví dụ

Sử dụng __lookupGetter__()

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

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

Tra cứu getter của thuộc tính theo cách chuẩn

Bạn nên sử dụng API Object.getOwnPropertyDescriptor() để tra cứu getter của thuộc tính. So với __lookupGetter__(), phương thức này cho phép tra cứu các thuộc tính symbol. Phương thức Object.getOwnPropertyDescriptor() cũng hoạt động với đối tượng có prototype là null, vốn không kế thừa từ Object.prototype và do đó không có phương thức __lookupGetter__(). Nếu hành vi duyệt lên prototype chain của __lookupGetter__() là quan trọng, bạn có thể tự triển khai nó với Object.getPrototypeOf().

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

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

Thông số kỹ thuật

Specification
ECMAScript® 2027 Language Specification
# sec-object.prototype.__lookupGetter__

Tương thích trình duyệt

Xem thêm