方法不在另一个方法内部调用

时间:2012-08-14 21:01:57

标签: javascript jquery methods

我正在尝试创建一个名为 Dialogo 的对象。这个想法是创建一些函数,然后在另一个方法本身内调用它们。看看:

function Dialogo(tamano){
    this.tamano = tamano;

    this.cerrar = function(){
        $('#dialogo_fondo').remove();
    };

    this.mostrar = function(){
        var dialogo_fondo = $('<div>').attr({id: 'dialogo_fondo' });
        $('body').fadeIn("slow", function(){$(this).append(dialogo_fondo);});
        $('#dialogo_fondo').css( {"width": $(window).width(), "height": $(window).height()});
        $('#dialogo_fondo').click(function(){ 
            this.cerrar(); 
        });
    };  
}  

使用jquery 1.7.2。根据代码,当我点击 #dialogo_fondo 元素时,应该删除它,因为在click事件中触发了 cerrar()方法。但它不起作用。你能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:1)

this声明中的

mostrar指向匿名函数实例,请使用console.log(this);进行检查。因此,您需要创建另一个对外部对象var that = this;的引用,并改为使用它:

function Dialogo(tamano){
    var that = this; // <--- here is the magic

    this.tamano = tamano;

    this.cerrar = function(){
        $('#dialogo_fondo').remove();
    };

    this.mostrar = function(){
        var dialogo_fondo = $('<div>').attr({id: 'dialogo_fondo' });
        $('body').fadeIn("slow", function(){$(this).append(dialogo_fondo);});
        $('#dialogo_fondo').css( {"width": $(window).width(), "height": $(window).height()});
        $('#dialogo_fondo').click(function(){ 
            that.cerrar(); // <---- use "that", not "this"
        });
    };  
}