我有一個大項目,我需要截取像element.src,element.href,element.style等東西的分配。我想通過defineSetter來做到這一點,但它的行爲非常奇怪(使用Chrome 8.0.552.231)Javascript的奇怪行爲__defineSetter__
一個例子:
var attribs = ["href", "src", "background", "action", "onblur", "style", "onchange", "onclick", "ondblclick", "onerror", "onfocus", "onkeydown", "onkeypress", "onkeyup", "onmousedown", "onmousemove", "onmouseover", "onmouseup", "onresize", "onselect", "onunload"];
for(a = 0; a < attribs.length; a++) {
var attrib_name = attribs[a];
var func = new Function("attrib_value", "this.setAttribute(\"" + attrib_name + "\", attrib_value.toUpperCase());");
HTMLElement.prototype.__defineSetter__(attrib_name, func);
}
這段代碼應該做的是,只要給attribs常見的元素屬性分配,它使用的setAttribute()設置一個大寫的版本的屬性。
對於一些非常奇怪的原因,setter只能工作約1/3的任務。
例如與
element.src = "test"
新src爲 「TEST」,喜歡它應該是
與element.href = "test"
新href是 「試驗」,然而
,沒有大寫
然後,即使當我嘗試element.__lookupSetter__("href")
,它返回適當的大寫setter
最奇怪的事是不同的變量,Chrome和Firefox
幫助之間正確攔截!
你可以推薦一些其他方法,或進一步解釋你的意思/如何實現DOM元素的包裝對象? – 2011-01-07 23:58:38