1

最後の行で、私が参照している「this」が、関数を実行しているオブジェクトではなく、インスタンス化されたk8rModalオブジェクトであることを確認するにはどうすればよいですか?

将来的には、ラムダ関数も動的に構築する必要があります。グローバル変数なしでそれは可能ですか?

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
}
4

1 に答える 1

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();
});

于 2012-10-28T22:00:46.083 に答える