1

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Objects/Object/watch

.watch()メソッドは、これを簡単に実行します。「プロパティに値が割り当てられるのを監視し、それが発生すると関数を実行します。」

長い記述形式:「このオブジェクトのpropという名前のプロパティへの割り当てを監視し、propが設定されるたびにhandler(prop、oldval、newval)を呼び出し、そのプロパティに戻り値を格納します。ウォッチポイントは値の割り当てをフィルタリング(または無効化)できます、変更されたnewvalを返すことによって(またはoldvalを返すことによって)。」

ここですべてのブラウザで動作させるための質問があります:すべてのブラウザ のObject.watch()?

それに似たものを探しています。私が探しているのは、この仕様に合わせるために使用できるメソッドです。「このオブジェクトの任意のプロパティへの割り当てを監視し、それが発生すると関数を実行します。」主な違いは、それが任意のプロパティであり、特定のプロパティだけであるということです。

誰かがそのようなメソッドを作成できますか、またはそのようなメソッドがすでに存在することを知っている場合は、それにリンクしますか?すべてのブラウザで動作させると便利です(マイナスIE、またはIE9に準拠している場合はマイナスIE8)

編集:私が意味することの例として、私はそれが何のために必要かを示します。

var DiscreteLine = function (leftBound, length){
  this.positive = [];
  this.negative = [];
  this.length = length;
  this.leftBound = leftBound;
  this.rightBound = leftBound + length

  if (this.leftBound < 0){
    this.negative.length = (leftBound * -1) + 1;
  } else {
    this.negative.length = 0;
  }
  if (this.rightBound >= 0){
    this.positive.length = rightBound + 1;
  } else {
    this.positive.length = 0;
  }

  this.watchObject = new ObjectWatcher(handler(prop, oldval, newval){ /* some stuff */ });

}

次に、たとえば、誰かが次のことをした場合:

theLine = new DiscreteLine(-2, 4);
theLine[-8] = 10;

ハンドラーは、引数( "-8"、undefined、10)を使用して呼び出します。(最終的には、スクリプトがleftBoundプロパティとlengthプロパティを自動的に再計算します(配列がlengthプロパティを自動的に更新する方法など)。

4

1 に答える 1

0

これには基本的に、既に定義されているオブジェクトのプロパティのセッターをオーバーライドする必要があります。私の知る限り、これは ECMAScript 5 (経由Object.defineProperty) でのみ可能です。現時点では、どのブラウザーがこれをサポートしているかはわかりません。 .

編集:あなたの例はあなたの要件を今すぐ明確にします。残念ながら、オブジェクトに新しいプロパティが追加されたときに通知を受ける方法が、この言語にはありません。あなたの例では、配列表記を関数呼び出しに置き換える以外に選択肢はありません。

于 2010-08-12T16:09:13.937 に答える