0

我对 OOP 比较陌生,所以我不确定术语。

我创建了一个 DOM 元素作为对象的一个​​字段(例如myObject.myElement),并将该元素附加到文档中。该对象.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

另一种方法(正如我之前提到的)是扫描所有包含元素的对象,如果它们包含特定元素。如果数组中没有所有这些对象,则必须扫描所有窗口组件(正如我所说,这很昂贵):

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

这只是一个未经测试的草稿。如果您有一个可以使用的父对象列表而不是 window.xml,那就更好了。

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 回答