为什么像scrollY这样的窗口属性在分配后不会自动更新?

时间:2018-11-24 20:19:40

标签: javascript

因此,我一直在使用javascript窗口属性,并尝试覆盖numeric_limits<double>::epsilon()属性,并且发现运行#include <limits>//is it here? void tfuuuuu() { double d_eps,invd_eps; float f_eps,invf_eps; invd_eps = 1.0/d_eps;//invd_eps should be finite invf_eps = 1.f/f_eps;//invf_eps should be finite } 后,即使滚动后它仍保持window.scrollY值,不会随着滚动位置更新。

我知道以下事实:window.scrollY = 123这样的特殊方法可以设置滚动位置,但我只是发现了这种连接。

1 个答案:

答案 0 :(得分:0)

您可以在对象中重现这种行为,如果未明确设置属性,则该对象将返回一些计算出的值。但是设置后,它会返回设置值。

因此,虽然您看到的内容看起来很奇怪,但这实际上仅是因为它从未打算供用户设置window.scrollY,并且一旦设置,它的值在尝试检索它时就不会改变

window.scrollTo(0,300)// set scrollY to 300 with proper setter

const fakeWindow = new Proxy({}, {
  get: function(target, name) {
    if (!(name in target) && name === 'scrollY') {
        console.log('Returning callculated')
        return window.scrollY;
    
    }
    console.log('Returning user set value')
    return target[name];
  }
});

console.log("[before set]" + fakeWindow.scrollY);
fakeWindow.scrollY = 5500;
console.log("[after set] " + fakeWindow.scrollY);
console.log('Actual window.scrollY=', window.scrollY)
<div style="height:2000px"></div>