[英]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.