用函数重写Javascript属性
Overriding a Javascript property with a function
我想用函数覆盖对象属性,这样无论何时调用对象的属性,它都会调用函数并返回结果。
这在JS这样的动态语言中应该是可能的吗?
上下文:
我正在尝试将一些仅限IE的代码移植到其他浏览器。该代码广泛使用"Microsoft.XMLDOM"对象来解析和查询XML文档。我想在非IE浏览器中使用标准的DOMParser。问题是,Microsoft实现为XML元素公开了一个非标准的"text"属性,而这个属性在代码库中被广泛使用,我想在Element原型上添加一个等效的函数。
Element.prototype.text = function() {...}
不起作用,因为当代码库执行"myelem.text"时,它实际上并没有运行函数,只是返回一个指向它的指针。
我该怎么做才能让它发挥作用?
在足够现代的Javascript(例如IE以外的任何东西)中,Object.defineProperty
可以做到这一点。
Object.defineProperty(Element.prototype, 'text', {
'get': function() {
return this.getText();
},
'enumerable': true
});
如果您不需要函数的外部参数,您可以在定义它之后执行,如下所示:
Element.prototype.text = (function() {...})();
然后,在调用之后
Element.text
您将从函数中获得返回值。
相关文章:
- 保存具有相同属性 JavaScript 的元素上的值
- DOM 元素上的空样式属性:JavaScript
- 基于一个属性Javascript检索多个对象
- xml获取属性javascript不会;无法处理childNodes
- 当输入填充了必需的属性javascript/html/css时,如何更改焦点颜色
- 如何处理未定义属性的未定义属性 javascript 类型错误
- 向嵌套对象添加属性 - Javascript
- 属性 Javascript 的访问属性
- 更改链中的 css 属性 - JavaScript
- 更改属性 Javascript 方式的值
- 如何从 url 解析 xml 获取属性 javascript
- 语法错误:缺少:在属性 javascript 之后
- 创建 if 条件基于 CSS 属性 -- JavaScript
- 访问节点的属性javascript二进制搜索树
- 访问父函数属性Javascript
- 为什么未定义此对象的属性?Javascript
- 访问私有属性Javascript OOP
- 访问数组中的属性?(Javascript)
- 动态添加参数作为对象的属性-JavaScript
- 冲突/方法/属性Javascript错误