Object.prototype.__defineGetter__()
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 cách định nghĩa getter sử dụng cú pháp khởi tạo đối tượng hoặc API Object.defineProperty(). 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 __defineGetter__() của các thực thể Object gắn một thuộc tính của đối tượng với một hàm sẽ được gọi khi thuộc tính đó được tra cứu.
Cú pháp
__defineGetter__(prop, func)
Tham số
Giá trị trả về
Không có (undefined).
Ngoại lệ
TypeError-
Được ném ra nếu
funckhông phải là một hàm.
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 __defineGetter__(). Phương thức này cho phép định nghĩa một getter trên một đối tượng đã tồn tại. Điều này tương đương với Object.defineProperty(obj, prop, { get: func, configurable: true, enumerable: true }), nghĩa là thuộc tính có thể liệt kê được và có thể cấu hình được, và bất kỳ setter nào đã tồn tại, nếu có, sẽ được giữ nguyên.
__defineGetter__() đượ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 __defineGetter__(), nó cũng cần triển khai các phương thức __lookupGetter__(), __lookupSetter__(), và __defineSetter__().
Ví dụ
>Sử dụng __defineGetter__()
const o = {};
o.__defineGetter__("gimmeFive", function () {
return 5;
});
console.log(o.gimmeFive); // 5
Định nghĩa thuộc tính getter theo cách chuẩn
Bạn có thể sử dụng cú pháp get để định nghĩa getter khi đối tượng được khởi tạo lần đầu.
const o = {
get gimmeFive() {
return 5;
},
};
console.log(o.gimmeFive); // 5
Bạn cũng có thể sử dụng Object.defineProperty() để định nghĩa getter trên một đối tượng sau khi nó đã được tạo. So với __defineGetter__(), phương thức này cho phép bạn kiểm soát khả năng liệt kê và khả năng cấu hình của getter, cũng như định nghĩa các thuộc tính symbol. Phương thức Object.defineProperty() 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 __defineGetter__().
const o = {};
Object.defineProperty(o, "gimmeFive", {
get() {
return 5;
},
configurable: true,
enumerable: true,
});
console.log(o.gimmeFive); // 5
Thông số kỹ thuật
| Specification |
|---|
| ECMAScript® 2027 Language Specification> # sec-object.prototype.__defineGetter__> |