问题标签 [host-object]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - IE8 无法向窗口返回的 JavaScript 对象添加属性
我刚刚在 IE8 中遇到了这个奇怪的问题,我似乎找不到更多关于它的细节。当然,如果我创建了一个 JavaScript 对象,无论如何我都可以通过动态定义它们来简单地添加属性:
伟大的。如果我调用这样的方法,那么在 IE8 中(我不确定其他 IE 是什么):
然后我收到 IE 错误“对象不支持此属性或方法”。这当然不会发生在我提到的第一种情况下,我个人在 javascript 中定义了我自己的对象。现在最简单的解决方法是这样做:
那没问题。但我想知道的是,为什么 IE8 不允许我向getBoundingClientRect()
方法返回的对象动态添加字段/属性/属性(我不确定正确的 JS 术语)?是否有另一种(正确的)方法来添加属性?对象的方法返回的所有对象都会发生这种情况window
吗?这有记录吗?或者它是一个错误?(在这种情况下,我将采取解决方法并继续前进)。
javascript - xy 和 x['y'] 会导致主机对象的不同行为吗?
对于普通的(“Native”)JavaScript 对象,其中属性名称是有效标识符,表达式x.y
总是x["y"]
在语义上等价。
主机对象是否保证了这种等效性?
宿主环境提供的 [..an] 对象,用于完成 ECMAScript 的执行环境。
如果没有,是否有明显的例外?(在 Cocoon、Crosswalk、IE 等中?)
特别是我对 Window ( window
) 和其他 DOM 对象感兴趣;以及预期行为是否存在任何已知的“例外”,或者是否存在任何可能的环境。
c++ - C++:如何从指向成员变量的指针中找到宿主对象
这里我们有一个简单的节点结构,它可以用来实现一个双链表。
假设我们不知道或不引用节点对象/实例,但我们确实有一个指向它的数据成员的指针。T数据;
如何从指向它的数据成员的指针中引用/找到主机节点对象?
javascript - 如何在浏览器代码中找到不属于 DOM、宿主对象等的所有 JavaScript 全局变量?
在浏览器中的 JavaScript 中,全局变量被存储为window
宿主对象的成员。
而且window
所有的属性window
都是浏览器 DOM 的一部分,如果我假设正确的话,其他全局函数和对象也是宿主对象或浏览器提供的实现/环境的其他部分。
我如何遍历成员window
并尽可能多地过滤掉不仅仅是由代码创建的常规全局变量的所有内容,例如var foo = 1;
?
javascript - 如何在浏览器中跟踪主机对象的本机 getter/setter 的调用者?
这是一个用例:
假设我们有一个有问题的网页,这导致页面在DOMContentLoaded触发后的某个时间点在移动设备上向上滚动。
我们可以合理地假设有一些东西在document.documentElement.scrollTop上运行(例如,给它赋值0)。
假设我们也知道有数百个地方会发生这种情况。
要调试问题,我们可以考虑以下策略:
检查每个事件处理程序,它可以设置一个值为 0 scrollTop,一个一个
尝试使用Chrome DevTools 中提供的调试功能
- 将本机 scrollTop 覆盖为:
第二种方法的问题在于它不适用于本机 getter/setter。
第三种方法的问题是,即使现在我们可以轻松地跟踪为scrollTop属性分配值的内容,但我们会对原生 getter/setter 进行修补,并有可能导致不必要的副作用。
因此问题是:是否有更优雅的解决方案来调试 Web 浏览器主机对象(例如文档、窗口、位置等)的本机 getter 和 setter?