因此,我一直在使用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
这样的特殊方法可以设置滚动位置,但我只是发现了这种连接。
答案 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>