javascript - JavaScript 中的功能范围和 "this"

标签 javascript jquery knockout.js this

我有一段简单的代码(其中 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/

相关文章:

javascript - data 参数如何与此函数配合使用?

javascript - Rails 4 jquery 函数只工作一次,而不是重新加载

javascript - 单击事件不会使其他字段可一键编辑?

jquery - 将数据拉入客户网站

javascript - 将 JavaScript 函数转换为字符串以便将其插入到 innerHTML 中的正确方法

javascript - Div 包括另外两个总计大于父 div 的 div。需要显示更多的第一个 div 内容。

rest - Symfony2 和使用 AngularJS 之类的框架的单一网页应用程序

javascript - KnockoutJS,如何使用可编辑的 HTML5 内容更新 View 模型?

javascript - KnockoutJs ko.utils.arrayFirst 不允许重复值作为结果

javascript - 使用 context.putImageData() 仅复制 Canvas 的一部分