无论出于何种原因,自定义对象的Javascript getters/setters似乎适用于除IE之外的任何浏览器。
IE是否有任何其他非标准机制? (与许多其他功能一样)
如果没有,是否有任何变通方法可以实现相同的功能?
答案 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!