Object.prototype.__lookupSetter__()
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 __lookupSetter__() của các thực thể Object trả về hàm được gắn làm setter cho thuộc tính được chỉ định.
Cú pháp
__lookupSetter__(prop)
Tham số
prop-
Một chuỗi chứa tên của thuộc tính mà setter của nó cần được trả về.
Giá trị trả về
Hàm được gắn làm setter 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 __lookupSetter__(). Nếu một setter đã đượ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 setter thông qua thuộc tính đó, vì thuộc tính đó chỉ gọi hàm khi nó được gán giá trị. __lookupSetter__() có thể được sử dụng để lấy tham chiếu đến hàm setter.
__lookupSetter__() 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 set 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ề.
__lookupSetter__() đượ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 __lookupSetter__(), nó cũng cần triển khai các phương thức __lookupGetter__(), __defineGetter__(), và __defineSetter__().
Ví dụ
>Sử dụng __lookupSetter__()
const obj = {
set foo(value) {
this.bar = value;
},
};
obj.__lookupSetter__("foo");
// [Function: set foo]
Tra cứu setter của thuộc tính theo cách chuẩn
Bạn nên sử dụng API Object.getOwnPropertyDescriptor() để tra cứu setter của thuộc tính. So với __lookupSetter__(), 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 __lookupSetter__(). Nếu hành vi duyệt lên prototype chain của __lookupSetter__() là quan trọng, bạn có thể tự triển khai nó với 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]
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__lookupSetter__> |