我有一段简单的代码(其中 ko == knockout lib):
$(function() {
//var el = document.getElementById('foo');
//console.log(el);
$("#foo").click (function() {console.log(this);});
}); // this == $("#foo")
ko.computed(function () {
console.log('ko computed',this); // this == window object
});
});
为什么“this”在回调中没有绑定(bind)到“ko”?我希望它将它绑定(bind)到调用函数,就像在点击处理程序中一样。
最佳答案
如果你看一下 knockout.js sourcecode对于这种方法,我们找到这一行:
return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction();
如果没有提供 evaluatorFunctionTarget(ko.computed
中的第二个参数),回调将在没有上下文的情况下被调用,this
将成为默认的 window
上下文。
如果您传递了第二个参数,回调将被调用,this
是您传递的任何内容。
除非一个函数被调用为另一个对象的属性(someobject.someMethod()
),否则调用时使用.call()
或.apply( )
,或者使用 .bind()
将上下文绑定(bind)到它,那么 this
将始终是 window
对象。
关于javascript - JavaScript 中的功能范围和 "this",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33395380/