2009-07-02 3 views
20

何らかの理由で、カスタムオブジェクトのJavascript getters/settersはIE以外のブラウザでは機能しないようです。IEのJavascriptゲッター/セッター?

IEにはこれ以外の標準的でないメカニズムがありますか? (他の多くの機能と同様に)

同じ機能を実現するための回避策はありますか?

+1

IE9とIE10が今これをサポートしてご覧くださいゲッターとセッター をエミュレートするためにVBを使用することができますブラウザます。http: //kangax.github.com/es5-compat-table/ –

+0

これらはオブジェクトリテラルでサポートされていますが、IEのオブジェクトプロトタイプではサポートされていません(http://robertnyman.com/javascript/javascript-getters-setters.html)。 #正規のゲッターとセッター – roguenet

答えて

8

IE8にはdefinePropertyがありますが、DOMオブジェクトのみです。しかし、おそらく、それは最終的にJavaScriptオブジェクトのために来るでしょう。

+4

最終的に?S私たちはIE 10でそれを見ますか? ;) –

+0

興味深い - 私はこれが追加されたことを知らなかった! @musicfreak:あなたと晴れやかな楽観主義... – Shog9

+27

IE10で見ることができますが、私たちはまだIE6をコーディングしています。 – Nosredna

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! 
+3

これはまだ3年後のアドバイスですか?この互換性テーブルを見ると、サポートが好きなようです。つまり、より良いです:http://kangax.github.com/es5-compat-table/ –

2
+0

あなたが提供したリンクのコアの詳細を追加することができます。あなたの回答が正しいとはいえ、あなたがリンクしているURLが利用できなくなった場合、それは役に立たなくなります。 – talegna