如何将变量传递给lambda函数?动态Lambda函数

时间:2012-10-28 21:48:56

标签: javascript javascript-objects lambda oop

在最后一行中,我如何确保我所指的“this”是实例化的k8rModal对象而不是运行该函数的对象?

对于未来的其他项目,我还需要动态构造lambda函数。这可能没有全局变量吗?

function k8rModal(DOMnamespace){
    var _ = this._ = DOMnamespace+"_"; // for DOM namespacing

    this.tightWrap=1;

    $('body').prepend('<div id="'+_+'stage"></div>');
    this.stage = stage = $('#'+_+'stage');
    stage.css({
        'display':'none',
        'width':'100%',
        'height':'100%',
        'color':'#333'
    });

    $('body').append('<div id="'+_+'slate"></div>');
    this.slate = slate = $('#'+_+'slate');
    slate.css({
        'display':'none',
        'width':'640px',
        'height':'480px',
        'color':'#eee'
    });

    $('body').delegate('.'+_+'caller','click',function(){
        /* this... but not, this? */.appear();
    });
}

k8rModal.prototype.appear = function(){
    //make the modal box appear
}

1 个答案:

答案 0 :(得分:1)

虽然您可以使用变量引用来引用@ianpgall建议的正确对象,但另一种可能性是为此目的使用jQuery的事件数据。

$('body').delegate('.'+_+'caller','click', {k8r: this}, function(event){
    event.data.k8r.appear();
});

或者,如果您使用的是jQuery 1.7或更高版本,则应该使用.on()代替.j

$('body').on('click', '.'+_+'caller', {k8r: this}, function(event){
    event.data.k8r.appear();
});