循环引用在事件处理函数中似乎不起作用

时间:2013-10-31 09:39:39

标签: javascript events this cyclic

我有一个名为paperClass的对象(尽管我知道,JScript中不存在类)。这包含对divElement的引用。现在,通过悬停divElement我想获得对paperClass对象的引用。我尝试了以下方式:

function paperClass(){
    this.divElement = $("#divElementID");
    this.divElement.paperElement = this;
    this.divElement.hover(this.handleHover);
    console.log(this.divElement.attr("id"));    // -> divElementID
    console.log(this.divElement.paperElement);    // -> paperClass Object
}

paperClass.prototype.handleHover = function(event){
    console.log(this.id);    // -> divElementID
    console.log($(this).attr("id"));    // -> divElementID
    console.log(this.paperElement);     // -> undefined (which seems ok to me)
    console.log($(this).paperElement);  // -> undefined (WHY????)
}

我还尝试了.attr()和$ data()方法。不幸的是我没有成功。你有什么想法?非常感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

该行

console.log($(this).paperElement);  // -> undefined (WHY????)

未定义paperElement属性,因为它仅存在于绑定到this.divElement的特定jQuery对象中。

如果您创建了一个新的jQuery对象,它将只有jQuery库设置的默认属性。

请改为尝试:

function paperClass(){
    this.divElement = $("#divElementID");
    this.divElement[0].paperElement = this; // change this line
    this.divElement.hover(this.handleHover);
    console.log(this.divElement.attr("id"));
    console.log(this.divElement.paperElement);
}

paperClass.prototype.handleHover = function(event){
    console.log(this.id);
    console.log(this.paperElement);
}