”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > JavaScript 能否为不可预测的属性实现动态 Getter 和 Setter?

JavaScript 能否为不可预测的属性实现动态 Getter 和 Setter?

发布于2024-11-08
浏览:867

 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