如何在JavaScript中调用当前对象的公共方法?

时间:2013-03-13 14:49:55

标签: javascript oop

此刻我走到了这一步。

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。 我可以调用私有方法。

我怎样才能做到这一点?

2 个答案:

答案 0 :(得分: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())
}

答案 1 :(得分:1)

你有一个范围问题,onclick中的this指向的是与你期望的不同的对象。在您的情况下,它是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())
}

Running Example