我试图向对象添加一个事件监听器,例如:
this.startLoading = function(){
this.a.addEventListener("complete", this.loadingHandler()); this gives me an error
},
this.loadingHandler = function(){
console.log("im doing something")
}
错误:“未捕获错误:addListener仅接受实例 功能。事件“完成”的监听器是“未定义”
但是,如果我将loadHandler()函数放在作用域内,例如:
this.startLoading = function(){
var loadingHandler = function(){...}
this.a.addEventListener("complete", loadingHandler()); // this works
},
我不确定函数的哪些实例在这方面意味着什么?
答案 0 :(得分:1)
当您在对函数的引用之后放置()
时,这意味着调用函数,并且表达式的值是函数返回的任何值。
你说的第二个例子,实际上是行不通的,如果调用“startLoading”函数,你会得到同样的错误。
因为你可能需要保留适当的上下文(this
),你可能需要的是
this.a.addEventListener("complete", this.loadingHandler.bind(this));
.bind()
方法会返回一个函数(正是addEventListener
所要求的函数),而函数又将调用您的函数,使this
具有所请求的值。