20

何らかの理由で、カスタム オブジェクトのJavascript ゲッター/セッターは、IE 以外のブラウザーで動作するようです。

IE には、このための他の非標準メカニズムがありますか? (他の多くの機能と同様)

そうでない場合、同じ機能を実現するための回避策はありますか?

4

4 に答える 4

8

IE8 ではそれdefinePropertyが可能ですが、DOM オブジェクトに対してのみです。しかし、最終的には JavaScript オブジェクトにも適用されると思われます。

于 2009-07-02T23:05:42.137 に答える
5

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!
于 2009-07-03T00:19:32.503 に答える
3

onpropertychange イベントと新しい仕様の defineProperty を使用する IE6+ のソリューションが利用可能です。ちょっとした落とし穴は、変数を dom オブジェクトにする必要があることです。

全詳細:

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

于 2012-06-06T15:04:00.293 に答える
2

古い IE ブラウザーでは、VB を使用してゲッターとセッターをエミュレートすることもできます 。クロス ブラウザー VBClass を使用したすべての IE のこのゲッターとセッターを見てください。

于 2014-09-08T11:15:22.690 に答える