如何覆盖javascript的cloneNode?

时间:2012-04-03 21:29:22

标签: javascript prototype

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

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

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

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

3 个答案:

答案 0 :(得分:0)

尝试使用:

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"

答案 1 :(得分:0)

这是Node.prototype https://developer.mozilla.org/En/DOM/Node.cloneNode

的属性

Node.prototype.cloneNode = function() {}

但是,修改内置对象可能会让您感到悲伤。如果可能,您应该创建一个不同的函数并使用它,这样,使用cloneNode的现有代码不会中断。

答案 2 :(得分:0)

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

截至4月4日,美国东部时间上午10:53,它需要使用IE,因为IE没有Node对象。

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