我不知道如何妥善处理此案。我有一个像这样的Javascript对象:
var myClass = {
init : function(){
$("button").on("click" , this.func1);
},
func1: function(){
// do stuffs
this.func2();
},
func2: function(){
// do stuffs
}
}
myClass.init();
当我为绑定事件初始化我的类时没有问题。在init函数中,this
的值是类本身,所以我可以毫无问题地调用它们的方法。
考虑到点击按钮时,我执行了func1
。我在函数func1
中发现了问题,因为在这种情况下this
的值是按下的按钮,所以当我尝试this.func2
时,我得到Uncaught TypeError: this.func2 is not a function
。
我如何处理这类问题?我确信有一种解决这个问题的标准方法,但我不知道。
谢谢!
答案 0 :(得分:4)
从您的示例中,this.func1
实际上在执行时不绑定任何上下文。因此,this
关键字将被window
上的legacy mode
对象或undefined
上的strict mode
后备。要在this.func1
上下文中执行myClass
,您可以使用以下方法之一:
this
设置为myClass
$("button").on("click", this.func1.bind(this));
包含匿名函数
var self = this;
$("button").on("click", function() {
self.func1();
});
$("button").on("click", () => this.func1());