KnockOut理解ko.computed函数在return语句中的最后一个“this”引用

时间:2014-02-14 19:30:58

标签: javascript knockout.js

我试图了解以下教程示例

中最后一个this的用法
function AppViewModel() {
    this.firstName = ko.observable("Bert");
    this.lastName = ko.observable("Bertington");

    this.fullName = ko.computed(function(){
    return this.firstName() + " " + this.lastName();
    },this);//This one!
}

我理解其他this与正在构建的AppViewModel()有关,当我删除逗号和最后this时,该示例不会绑定任何数据。使用this.fullName不足以将该函数绑定到AppViewModel()

因此,ko.computed(function()...表示将此对象中的引用返回到firstNamelastName连接设置为此实例fullName,我错过了什么?

1 个答案:

答案 0 :(得分:2)

问题不在于将计算分配给this.fullName;它与计算函数内的this的值有关。默认情况下,在计算函数的上下文中计算时this中的return this.firstName() + " " + this.lastName();window

要解决此问题,我们通常会将this捕获到名为selfthat的变量中。 ko.computed()提供了第二种捕获this的方法,并将其作为第二个参数传入。这就是为什么只有当您包含第二个this参数时,您的代码段才有效。

有关更多详细信息,请参阅full docs on Computed Observables(向下滚动至管理“此”)。