我对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
}
还是有更好的方法吗?
答案 0 :(得分:0)
对父级的反向引用可能比复制值更好:
function bubbleObject(value)
{
this.value = value;
this.element = document.createElement('div');
$(this.element).appendTo('.bubbles');
this.element.parent = this;
}
但是,使用这种方式你必须使用element.parent.value。
答案 1 :(得分:0)
另一种方法(如前所述)是扫描所有包含元素的对象(如果它们包含特定元素)。如果你没有在数组中拥有所有这些对象,你必须扫描所有窗口组件(正如我所说,这是昂贵的):
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;
}