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

问题是,在您的处理程序中,您丢失了上下文(this不再意味着您的 Class 实例,而是指触发您的事件的对象。您需要创建一个闭包范围的版本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

您有范围问题,thisonclick 指向的对象与您期望的对象不同。在你的情况下,它是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 回答