何らかの理由で、カスタム オブジェクトのJavascript ゲッター/セッターは、IE 以外のブラウザーで動作するようです。
IE には、このための他の非標準メカニズムがありますか? (他の多くの機能と同様)
そうでない場合、同じ機能を実現するための回避策はありますか?
何らかの理由で、カスタム オブジェクトのJavascript ゲッター/セッターは、IE 以外のブラウザーで動作するようです。
IE には、このための他の非標準メカニズムがありますか? (他の多くの機能と同様)
そうでない場合、同じ機能を実現するための回避策はありますか?
IE8 ではそれdefineProperty
が可能ですが、DOM オブジェクトに対してのみです。しかし、最終的には JavaScript オブジェクトにも適用されると思われます。
Resig の投稿では、env.js の実装が、探しているゲッターとセッターの方法論を初めて使用したことを示しています。彼にとってこのスタイルがうまく機能する理由は、それらがブラウザー ベースの環境で使用されていないためです。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!
onpropertychange イベントと新しい仕様の defineProperty を使用する IE6+ のソリューションが利用可能です。ちょっとした落とし穴は、変数を dom オブジェクトにする必要があることです。
全詳細:
http://johndyer.name/native-browser-get-set-properties-in-javascript/
古い IE ブラウザーでは、VB を使用してゲッターとセッターをエミュレートすることもできます 。クロス ブラウザー VBClass を使用したすべての IE のこのゲッターとセッターを見てください。