1

現時点で私はここまで来ました。

function Class() {

    var privateMethod = function () {
        return 'private'
    }

    this.publicMethod = function () {
        return 'public'
    }

    var _constructor = function () {
        $(document).on('click', _onClick)
    }

    var _onClick = function () {
        // My error is `this`, focus now on the click event, but I need the object itself
        console.log(privateMethod())
        console.log(this.publicMethod())
    }

    _constructor()
}


$(document).ready(init)

function init() {
    new Class()
}

問題は、クリックイベントでpublicMethodを呼び出せないことです。プライベートメソッドを呼び出すことができます。

どうすればこれを達成できますか?

4

2 に答える 2

2

問題は、ハンドラーでコンテキストが失われたことです(thisClassのインスタンスを意味するのではなく、イベントをトリガーしたオブジェクトを意味しますthis。そのコンテキストを保持するには、のクロージャースコープバージョンを作成する必要があります。

var self = this;
var _onClick = function () {
    // My error is `this`, focus now on the click event, but I need the object itself
    console.log(privateMethod())
    console.log(self.publicMethod())
}
于 2013-03-13T14:52:06.537 に答える
1

スコープの問題がありますthis。onclickで、予想とは異なるオブジェクトを指しています。あなたの場合、それはdocument

var that = this;
var _onClick = function () {
    // My error is `this`, focus now on the click event, but I need the object itself
    console.log(privateMethod())
    console.log(that.publicMethod())
}

実行例

于 2013-03-13T14:53:28.850 に答える