2009-07-02 47 views
20

無論出於何種原因,自定義對象的Javascript getters/setters似乎適用於除IE之外的任何瀏覽器。在IE中的Javascript getters/setters?

IE是否有任何其他非標準機制呢? (與許多其他功能一樣)

如果沒有,是否有任何解決方法來實現相同的功能?

+1

IE9和IE10現在支持這一點:HTTP: //kangax.github.com/es5-compat-table/ – 2012-05-30 15:59:06

+0

它們支持對象文字,但不支持IE中的對象原型:(http://robertnyman.com/javascript/javascript-getters-setters.html #regular-getters-and-setters – roguenet 2013-01-15 19:21:34

回答

8

IE8有它通過defineProperty,但只適用於DOM對象。但據推測,它最終也會用於JavaScript對象。

+4

最終?S o我們將在IE 10中看到它? ;) – 2009-07-02 23:07:22

+0

有趣的 - 我不知道這已被添加! @musicfreak:你和你的陽光樂觀...... – Shog9 2009-07-02 23:10:07

5

Resig的帖子引用了他的env.js實現,這是他第一次使用你正在尋找的getters和setters方法。這種風格的工作原因是因爲他們沒有在基於瀏覽器的環境中使用,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!