繁体   English   中英

如何覆盖 javascript 的 cloneNode?

[英]How do I override javascript's cloneNode?

这是我到目前为止所拥有的: http://jsfiddle.net/beCVL/5/

这就是我试图覆盖默认 cloneNode 的方式:Object.defineProperty(Object.prototype, "cloneNode", { get: cloneNode2, set: cloneNode2 });

但它不起作用,所以,我认为 Object.prototype 没有 cloneNode,但 Element.prototype 也没有。

那么,假设我的方法是正确的,我需要使用哪个 class 来覆盖 cloneNode?

尝试使用:

Node.prototype.cloneNode = cloneNode2;

Object.defineProperty不用于此目的。 这是一个使用示例:

var o = {};
Object.defineProperty(o, 'blah', {
    'get': function () { return 'asdf'; },
    'set': function (x) { alert(x); }
});

alert(o.blah); // alerts 'asdf'
o.blah = 'fdsa'; // alerts 'fdsa'

显然,这只适用于 Chrome。

要解决实际问题,只需将 RGB 代码替换为等效的十六进制代码即可。

function decToHex(a) {
    return ('00' + (+a).toString(16)).substr(-2);
}
function replaceRGB(str) {
    return str.replace(/rgb\((\d{1,3}), (\d{1,3}), (\d{1,3})\)/, function (_, r, g, b) {
        return "#" + decToHex(r) + decToHex(g) + decToHex(b);
    });
}
replaceRGB("color: rgb(255, 0, 0)") // "color: #ff0000"

它是 Node.prototype 的属性Node.prototype ://developer.mozilla.org/En/DOM/Node.cloneNode

Node.prototype.cloneNode = function() {}

但是,修改内置对象可能会在将来给您带来麻烦。 如果可能,您应该创建一个不同的 function 并改用它,这样,使用cloneNode的现有代码就不会中断。

这一系列的小提琴是一项正在进行的工作,但它重新实现了 cloneNode 的功能。 http://jsfiddle.net/beCVL/19/

截至美国东部时间 4 月 4 日上午 10:53,它需要与 IE 配合使用,因为 IE 没有节点 object。

请注意,在 IE 中,原型函数不能被覆盖。 因此,cloneNode 的所有实例都必须替换为 function,它确定要使用哪个版本的 cloneNode。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM