IE中的Javascript getters / setters?

时间:2009-07-02 23:00:05

标签: javascript internet-explorer setter getter incompatibility

无论出于何种原因,自定义对象的Javascript getters/setters似乎适用于除IE之外的任何浏览器。

IE是否有任何其他非标准机制? (与许多其他功能一样)

如果没有,是否有任何变通方法可以实现相同的功能?

4 个答案:

答案 0 :(得分:8)

IE8通过defineProperty,但仅限于DOM对象。但据说,它最终也会出现在JavaScript对象中。

答案 1 :(得分:5)

Resig的帖子引用了他的env.js实现,这是他第一次使用你正在寻找的getter和setter方法。这种风格适合他的原因是因为它们没有在基于浏览器的环境中使用,env.js主要专注于服务器端JS或Rhino等脚本环境。

为了处理浏览器兼容性以及关注JavaScript做得很好的方面,请使用getter和setter方法的闭包来保护对象属性。

例如:

foo: function(val) {
     var bar = val;
     this.setBar: function(newBar) { 
         bar = newBar;
     },
     this.getBar: function() {
         return bar;
     }
}

这将导致:

var checkFoo = foo("cool!");
alert(checkFoo.getBar()); //cool!
checkFoo.setBar("nice!");
alert(checkFoo.getBar()); //nice!

答案 2 :(得分:3)

IE6 +的解决方案可用,它使用onpropertychange事件和较新的规范defineProperty。轻微的问题是,您需要将变量设为dom对象。

完整详情:

http://johndyer.name/native-browser-get-set-properties-in-javascript/

答案 3 :(得分:2)

对于旧的IE浏览器,您还可以使用VB来模拟getter和setter 看看这个 getters & setters for all IE with cross browser VBClass!