无论出于何种原因,自定义对象的Javascript getter/setter似乎适用于除 IE 之外的任何浏览器。
IE 是否有任何其他非标准机制?(与许多其他功能一样)
如果没有,是否有任何解决方法可以实现相同的功能?
无论出于何种原因,自定义对象的Javascript getter/setter似乎适用于除 IE 之外的任何浏览器。
IE 是否有任何其他非标准机制?(与许多其他功能一样)
如果没有,是否有任何解决方法可以实现相同的功能?
IE8 有它defineProperty
,但仅适用于 DOM 对象。但据说,它最终也会出现在 JavaScript 对象中。
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!
IE6+ 的解决方案是可用的,它使用 onpropertychange 事件和较新的规范 defineProperty。轻微的问题是您需要将变量设为 dom 对象。
完整详情:
http://johndyer.name/native-browser-get-set-properties-in-javascript/
对于旧的 IE 浏览器,您还可以使用 VB 来模拟 getter 和 setter 看看这个 getter & setter for all IE with cross browser VBClass!