功能范围和javascript中的"this"

Mus*_*ore 2 javascript jquery this knockout.js

我有这个简单的代码(其中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
    });
});
Run Code Online (Sandbox Code Playgroud)

为什么"this"在回调中没有绑定到"ko"?我希望它绑定到调用函数,就像在单击处理程序中一样.

nde*_*ore 5

如果您查看此方法的knockout.js源代码,我们会找到以下行:

return state.evaluatorFunctionTarget ? readFunction.call(state.evaluatorFunctionTarget) : readFunction();
Run Code Online (Sandbox Code Playgroud)

如果没有提供evaluateatorFunctionTarget(第二个参数ko.computed),则回调被调用而没有上下文,并且this将是默认window上下文.

如果你传递了第二个参数,那么调用回调就是this你传递的任何东西.

除非将函数作为另一个object(someobject.someMethod())的属性调用,使用.call()or 调用,或者使用与之.apply()绑定的上下文.bind(),否则this将始终是该window对象.

  • 是的,jQuery的事件处理函数手动添加此绑定. (3认同)