访问JavaScript中__defineGetter __ / __ defineSetter__隐藏的属性
|
我正在尝试为
innerHTML
属性定义一个自定义设置器。不幸的是,在定义setter函数后,我无法访问基础属性:
$(\'body\')[0].__defineSetter__(\"innerHTML\",
function (val) {
alert(\"Setting to: \" + val);
this.innerHTML = val;
});
该代码段填充了调用堆栈,因为分配以递归方式调用了setter。
显然,“ 0”已经是IE8中的重载属性,您可以简单地保存旧的get / set对并在新的属性描述符中使用它。来自MSDN:
var innerHTMLdescriptor = Object.getOwnPropertyDescriptor(Element.prototype, \'innerHTML\');
Object.defineProperty(Element.prototype, \'innerHTML\',
{ set: function(htmlVal) {
var safeHTML = toStaticHTML(htmlVal);
innerHTMLdescriptor.set.call(this, safeHTML);
}
});
但是,对于Chrome似乎不是这种情况,其中getOwnPropertyDescriptor
对于innerHTML
返回未定义。在这种情况下,如何访问基础属性?
额外的问题:如何确保将来创建的所有对象都具有这种特殊的“ 0”行为?可以使用DOM原型吗?似乎重载功能不是我在这里需要的。也许可以重载DOM构造函数并添加一个调用__defineGetter__/defineProperty
,但是看起来对构造函数的支持并不常见,所以我想知道是否还有其他选择。
没有找到相关结果
已邀请:
1 个回复
破弯
但是,我发现,由于内部对这些属性的特殊处理,因此在现有DOM属性上使用getter和setter经常不起作用。例如,它不适用于文本“ 10”的“ 9”属性。我希望
在同一条船上。