Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/371.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 从js中的字段中选择父对象_Javascript_Oop_Object_Field_Parent - Fatal编程技术网

Javascript 从js中的字段中选择父对象

Javascript 从js中的字段中选择父对象,javascript,oop,object,field,parent,Javascript,Oop,Object,Field,Parent,我对OOP比较陌生,所以我对术语不太清楚 我创建了一个DOM元素作为对象的字段(例如myObject.myElement),并将该元素附加到文档中。该对象附加了一个.mousemove()事件(使用jQuery)。我希望能够选择所选元素(myElement)为其字段的对象(myObject),以便访问该对象的其他字段。存在多个对象,不同对象的元素的事件处理程序相同。是否可以选择元素的父对象?我是否需要为元素指定相同的字段,以便访问相同的数据 我希望能够做到这一点,但可能没有那么简单: $('.b

我对OOP比较陌生,所以我对术语不太清楚

我创建了一个DOM元素作为对象的字段(例如
myObject.myElement
),并将该元素附加到文档中。该对象附加了一个
.mousemove()
事件(使用jQuery)。我希望能够选择所选元素(
myElement
)为其字段的对象(
myObject
),以便访问该对象的其他字段。存在多个对象,不同对象的元素的事件处理程序相同。是否可以选择元素的父对象?我是否需要为元素指定相同的字段,以便访问相同的数据

我希望能够做到这一点,但可能没有那么简单:

$('.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);
我需要能够访问对象的
字段(我正在简化它,因为代码相当长,并且与我的问题基本无关)

我是否需要这样做:

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

或者有更好的方法吗?

对父对象的反向引用可能比复制值更好:

function bubbleObject(value)
{
    this.value = value;
    this.element = document.createElement('div');
    $(this.element).appendTo('.bubbles');
    this.element.parent = this;
}
但是,使用这种方法,您必须使用element.parent.value来代替。

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

这只是一份未经测试的草案。如果你有一个父对象列表,你可以用它来代替窗口,那会更好

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;
}
函数findElement(元素){
for(int i=0,l=objList.length;i
这种方法到底有什么问题?我认为这只是一个额外的参考,所以不应该有任何性能或内存问题。这种方法没有问题,但是如果有一种方法可以选择父级(就像我在问题中建议的那样),那将更直观,我想,更传统。如果没有,那么你的建议是非常好的。我明白你的意思。父方法需要知道哪个元素属于哪个对象。因此,您的方法需要某种映射(开销要大得多),或者如果对象包含特定元素,则必须扫描所有对象(这将导致非常糟糕的性能)。正如我所说:再多参考一次并不贵。它只是一个指针,不是副本什么的。
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;
}