【问题标题】:Javascript getters/setters in IE?IE 中的 Javascript 获取器/设置器?
【发布时间】:2009-07-02 23:00:05
【问题描述】:

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

IE 是否有任何其他非标准机制来解决这个问题? (与许多其他功能一样)

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

【问题讨论】:

标签: javascript internet-explorer setter getter incompatibility


【解决方案1】:

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

【讨论】:

  • 最终?那么我们会在 IE 10 中看到它吗? ;)
  • 有趣 - 我不知道这已经被添加了! @musicfreak:你和你阳光般的乐观......
  • 我们可能会在 IE10 中看到它,但我们仍会为 IE6 编写代码。
【解决方案2】:

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!

【讨论】:

【解决方案3】:

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

详细信息:

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

【讨论】:

    【解决方案4】:

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

    【讨论】:

    • 您可能想要添加您提供的链接的核心细节。就其(您的回复)而言,虽然是正确的,但如果您链接的网址不可用,它的帮助将变得不那么大。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-10-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    相关资源
    最近更新 更多