Noobie jquery class Q:内部函数调用

时间:2012-07-13 21:01:04

标签: jquery

我在线上有一个断点this.hide();它在firebug中被恰当地找到,但从未传递给hide:function()。我假设我正在制作一个非常令人尴尬的noobie语法错误。有人可以告诉我拨打内部电话的正确方法吗?

谢谢!

var myDialog = myControl.extend( { 
    //init  

    show : function() {
        if (this.isModal) {
            this.overlay.unbind("click");
        } else {
            this.overlay.click(function(e) {
                this.hide();
            });
        }
    },

    hide : function() {
        this.overlay.hide();
        this.dialog.fadeOut(300);
    }
});

2 个答案:

答案 0 :(得分:2)

您最有可能无法在this.overlay.click()处理程序中的预期上下文中运行。在this.hide()上放置一个断点并检查“this”对象。我打赌这不是你所期待的!

您需要在该调用之前缓存“this”,例如:

show : function() {
    var context = this;
    if (this.isModal) {
        this.overlay.unbind("click");
    } else {
        this.overlay.click(function(e) {
            context.hide();
    });
},

Javascript上下文/范围是一个棘手的情况。

答案 1 :(得分:2)

由于您的this.hide();行位于点击事件中,this实际上是指点击的元素。