gpt4 book ai didi

javascript - 在 JavaScript 中定义一个 Universal/Fallback getter 属性

转载 作者:可可西里 更新时间:2023-11-01 02:18:59 26 4
gpt4 key购买 nike

JavaScript 具有 Object.defineProperty 的 getter。所以我可以在 window 的属性 random 上定义一个 getter by

Object.defineProperty(window, 'random', {
get: function () {
return Math.random();
}
});

random // Evaluates to a random number

是否可以为给定的对象定义一个“通用的 getter”,而不考虑对象的属性?我想做类似的事情

Object.universalGetter(window, function (propertyName) {
console.log('Accessing property', propertyName, 'of window.');
});

window.Function // Prints "Accessing property Function of window."

我可以在 JavaScript 中使用“通用 setter/getter ”吗?

最佳答案

很遗憾:没有。

有一种东西叫Proxy基于 Gecko 18 的浏览器中引入的对象

这将允许你做这样的事情

(function (original, Window) {
var handler = {
get: function (target, propertyName) {
console.log('Accessing property', propertyName, 'of window.');
return target[propertyName];
}
};

Window = new Proxy(original, handler);


console.log(Window.setTimeout);
// "Accessing property"
// "setTimeout"
// "of window."

// function setTimeout() {
// [native code]
// }
})(window);

但这不是标准并且仍然很不稳定

顺便说一句,我最初认为您可以直接使用 window 作为 IIFE 中的局部变量,但似乎您不能只记录未定义的日志(想知道为什么)所以我将“W”大写

这是关于 JSBin 的一个例子

注意:您应该在 Firefox 中访问它

关于javascript - 在 JavaScript 中定义一个 Universal/Fallback getter 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14862052/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com