0

私はOOPに比較的慣れていないので、用語についてはよくわかりません。

オブジェクト(例myObject.myElement)のフィールドとしてDOM要素を作成し、その要素をドキュメントに追加しました。オブジェクトには.mousemove()(jQueryを使用して)イベントがアタッチされています。myObjectオブジェクトの他のフィールドにアクセスできるように、選択した要素(myElement)がフィールドであるオブジェクト()を選択できるようにしたい。複数のオブジェクトがあり、イベントハンドラーは異なるオブジェクトの要素に対して同じです。要素の親オブジェクトを選択することは可能ですか?同じデータにアクセスできるように、要素に同じフィールドを指定する必要がありますか?

私はこのようなことをしたいのですが、多分それはそれほど単純ではありません:

$('.bubble').on({mousemove: function () {
    parentObject = this.parentObject();
    alert(parentObject.otherDataField);
});

要素は次のように作成されました。

function bubbleObject(value)
{
    this.value = value;
    this.element = document.createElement('div');
    $(this.element).appendTo('.bubbles');
}

myFirstBubble = new bubbleObject(10);
mySecondBubble = new bubbleObject(100);

そして、オブジェクトのフィールドにアクセスできる必要がありvalueます(コードがかなり長く、ほとんど問題とは無関係であるため、オブジェクトを単純化しています)。

これを行う必要がありますか:

function bubbleObject(value)
{
    this.value = value;
    this.element = document.createElement('div');
    $(this.element).appendTo('.bubbles');
    this.element.value = value; // add same value to element
}

またはもっと良い方法はありますか?

4

2 に答える 2

0

親への後方参照は、値をコピーするよりも優れている可能性があります。

function bubbleObject(value)
{
    this.value = value;
    this.element = document.createElement('div');
    $(this.element).appendTo('.bubbles');
    this.element.parent = this;
}

ただし、この方法を使用する場合は、代わりに element.parent.value を使用する必要があります。

于 2012-06-28T15:30:10.593 に答える
0

もう 1 つの方法は (前に述べたように)、特定の要素が含まれている場合、要素を含むすべてのオブジェクトをスキャンすることです。これらすべてのオブジェクトが配列に含まれていない場合は、すべてのウィンドウ コンポーネントをスキャンする必要があります (前述のとおり、これにはコストがかかります)。

function findElement(element) {
  for (obj in window) {
    if (typeof obj === 'object' && obj.myElement == element) {
      return obj;
    }
  }
  return null;
}

これは未テストのドラフトです。ウィンドウの代わりに使用できる親オブジェクトのリストがあれば、さらに良いでしょう。

function findElement(element) {
  for (int i = 0, l = objList.length; i < l; i++) {
    if (typeof objList[i] === 'object' && objList[i].myElement == element) {
      return objList[i];
    }
  }
  return null;
}
于 2012-06-29T10:18:50.297 に答える