我正在尝试解决最近想到的一个问题。假设我们想要并且知道如何在 javascript 中使用动态 getter 和 setter,更像是 php (__get, __set) 中的那些。但是由于 javascript 没有包罗万象的属性,我们唯一能做的就是提供可能的键列表并迭代以仅在这些键上添加 getter 和 setter,并希望不会有其他键出现。
但问题远未解决。因此,我想到的下一个方法是对 and 使用讨厌的 hack try
,catch
因此任何时候在对象中未定义名称以将其catch
用作吸气剂(至少)然后恢复代码,这很难而且可能毫无意义做。但是从这里出现了我的第二个问题,在这样的用途中:
console.log(g.someundefinedproperty);
结果将是对console.log
显示的调用undefined
,没有任何异常被抛出。然后我想到了:如果我使用原始的window.undefined
getter 和 setter 怎么办,毕竟每次我搞砸并拼错单词或其他东西时都必须调用它。
所以我尝试了
Object.defineProperty(window, 'undefined', {
get : function ()
{
// functional code, including getting the caller and figuring out
// where we are, and what we have to do... easy :D
console.log('works');
},
set : function ()
{
// some couple more fine hacks here
console.log('this too');
}
});
但不幸的undefined
是 window 的属性是configurable : false
. 尝试的其他黑客攻击是克隆window
对象,除了undefined
和内部window
属性。并在新对象上定义新的undefined
(请注意讽刺)然后window = mybetterwindow
;
由于这没有引起任何问题,我寄予厚望,但系统又一次让我失望window
,因为设计无法覆盖。我猜测它有自己的吸气剂,它会根据原型中的原型重新实例化自己,window.prototype
甚至更好Window.prototype
(注意大写)。
作为我在这个实验中的最后一步,我重新定义undefined
了这个原型命中运行。无济于事,没有任何改变......我尝试创建一个new Window()
,但Window
不是构造函数,失败!
由于我的想法已经用完了,我发现自己在这里写这篇请求帮助。如果您有任何想法如何解决动态 getter 和 setter 问题,(the existencial problem of life, universe and everything else
),以一种不会以任何方式修改...我使用对象的方式(作为奖励,它不在中need to break
)或语法,我恳求你说话或永远保持沉默:)。hole
fabric of time and space