此刻我走到了这一步。
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。 我可以调用私有方法。
我怎样才能做到这一点?
答案 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())
}