1

我想用一个函数覆盖一个对象属性,这样每当调用对象的属性时,它就会调用该函数并返回结果。

当然,这应该可以在动态语言(如 JS)中实现吗?

语境:

我正在尝试将一些仅限 IE 的代码移植到其他浏览器。该代码广泛使用“Microsoft.XMLDOM”对象来解析和查询 XML 文档。我想在非 IE 浏览器中使用标准的 DOMParser。问题是 Microsoft 实现为 XML 元素公开了一个非标准的“文本”属性,并且该属性在代码库中被广泛使用,我想在 Element 原型上添加一个等效函数。

Element.prototype.text = function() {...}

不起作用,因为当代码库执行“myelem.text”时,它实际上并没有运行该函数,它只是返回一个指向它的指针。

我应该怎么做才能完成这项工作?

4

2 回答 2

1

在足够现代的 Javascript(例如 IE 以外的任何东西)中,Object.defineProperty可以做到这一点。

Object.defineProperty(Element.prototype, 'text', {
    'get': function() {
        return this.getText();
    },
    'enumerable': true
});
于 2012-07-29T01:36:22.640 回答
0

如果您不需要函数的外部参数,您可以在定义它之后执行,如下所示:

Element.prototype.text = (function() {...})();

然后,调用后

Element.text

您将从函数中获取返回值。

于 2012-07-29T00:49:44.703 回答