」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > JavaScript 能否為不可預測的屬性實現動態 Getter 和 Setter?

JavaScript 能否為不可預測的屬性實現動態 Getter 和 Setter?

發佈於2024-11-08
瀏覽:495

 Can JavaScript Implement Dynamic Getters and Setters for Unpredictable Properties?

JavaScript 可以實作動態 Getters/Setters 嗎?

動態 getters 和 setters 允許 JavaScript 物件處理超出預先定義屬性的屬性存取和修改。雖然早期的 JavaScript 技術對已知屬性使用特定的 getter 和 setter,但本文探討了為任何未定義的屬性實現包羅萬象的 getter 和 setter 的可能性。

ES2015 代理:動態解決方案

ES2015 引進了 JavaScript 代理,它可以建立充當其他物件中介的物件。此功能開啟了動態 getter 和 setter:

const original = {
    example: "value",
};
const proxy = new Proxy(original, {
    get(target, name, receiver) {
        if (Reflect.has(target, name)) {
            let rv = Reflect.get(target, name, receiver);
            if (typeof rv === "string") {
                rv = rv.toUpperCase();
            }
            return rv;
        }
        return "missing";
    },
});

console.log(`proxy.example = ${proxy.example}`); // "proxy.example = VALUE"
console.log(`proxy.unknown = ${proxy.unknown}`); // "proxy.unknown = missing"

在此範例中,代理物件攔截原始物件的屬性存取。當存取字串屬性時,代理將其轉換為大寫並傳回;對於未知屬性,它會傳回「缺失」而不是未定義。

如果瀏覽器支援 ES2015 (ES6),則此實作是跨瀏覽器相容的。對於較舊的瀏覽器,請考慮使用 polyfill 或替代技術。代理程式為動態 getter 和 setter 提供了靈活的解決方案,無需修改原始物件即可實現高效的屬性處理和屬性內省。

最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3