我想用函数覆盖一个对象属性,这样无论何时调用对象的属性,它都会调用该函数并返回结果。
当然,这应该可以用JS等动态语言来实现。
上下文:
我正在尝试将一些仅限IE的代码移植到其他浏览器。该代码广泛使用“Microsoft.XMLDOM”对象来解析和查询XML文档。我想在非IE浏览器中使用标准DOMParser。问题是Microsoft实现为XML元素公开了一个非标准的'text'属性,并且这个属性在代码库中被广泛使用,我想在Element原型上添加一个等效的函数。
Element.prototype.text = function() {...}
不起作用,因为当代码库执行'myelem.text'时,它实际上并不运行该函数,它只返回指向它的指针。
我该怎么做才能使这项工作?
答案 0 :(得分:1)
在足够现代的Javascript(例如IE以外的任何其他内容)中,Object.defineProperty
可以做到这一点。
Object.defineProperty(Element.prototype, 'text', {
'get': function() {
return this.getText();
},
'enumerable': true
});
答案 1 :(得分:0)
如果你不需要函数的外部参数,你可以在定义之后执行,如下所示:
Element.prototype.text = (function() {...})();
然后,在致电
之后Element.text
您将从函数中获取返回的值。