javascript - 覆盖内置 JavaScript 对象的成员

标签 javascript client-side

我想覆盖所有 html 元素的 offsetParent 成员的默认行为。如果可能的话,我想做这样的事情:

// For <div id="foo"></div>
var oFooElem = document.getElementById("foo");
oFooElem._offsetParent = oFooElem.offsetParent;
oFooElem.prototype.offsetParent = function() {
    window.status = 'offsetParent called.';
    return this._offsetParent;
};

这可能吗?如果是这样,请发布更正后的代码示例。谢谢!

更新:

@some 谢谢你的帮助。听起来这是不可能的。我在新的 question 中详细阐述了引发这个问题的问题。如果你有兴趣。

最佳答案

据我所知这是不可能的。 在 Firefox 中我得到异常“设置一个只有 getter 的属性”,IE 给出错误,Chrome 给出错误,但在 Opera 中它可以工作(如果我将它分配给元素,而不是原型(prototype))!

但是你还有另一个问题。 offsetParent 不是一个函数,因此它永远不会像函数一样被调用,并且您的警报永远不会发生。在 Opera(我发现的唯一可以替换它的浏览器)中,您只能恢复该功能。

但是,您可以添加一个新函数(适用于 Firefox、Chrome 和 Opera,但不适用于 IE,因为 IE 没有构造函数属性):

var e = document.getElementById("mydiv"); //Get a div element
//Adds a _offsetParent function to all DIV elements.
e.constructor.prototype._offsetParent=function(){
  alert("offset parent called"); return this.offsetParent;
};
e._offsetParent();

更新 通过阅读您的描述here我看到你的错误:

  1. 您获得了对该对象的引用 称为 myInnerContent
  2. 当您替换外部标记的内容时,您就从 DOM 中删除了该对象。
  3. 您尝试从孤立的旧对象中获取父对象,并且 不再存在于 DOM 中。 IE 给你一个 Error,而 Firefox 给你 null。

您的页面上已经有解决方案:保存对象的名称。您可以选择在更新内容时更新全局变量,或者仅更新内部 div 的innerHTML。

关于javascript - 覆盖内置 JavaScript 对象的成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/370333/

相关文章:

javascript - 替换不是替换文本

javascript - Selenium - 使用 javascript 启用元素在 Jenkins 中不起作用

asp.net-mvc - TinyMCE客户端验证问题

javascript - 如何使用 NodeUnit 测试客户端代码

javascript - ValidatorEnable 不禁用 requiredfieldvalidator

javascript - 客户端和服务器端编程有什么区别?

javascript - 单击弹出区域之外时,弹出窗口将返回隐藏状态

javascript - Rails 网页加载时间较长

javascript - JS : there is a new operator "=>"

javascript - 如何从 Next.js 中的一个页面请求中预取多个页面的代码?