在JavaScript和knockout.js中,为什么我不能返回变量?为什么我必须返回变量,就像它是一个方法一样?

时间:2015-02-07 22:55:55

标签: javascript variables methods knockout.js return

考虑这段代码:

function AppViewModel() {
    this.firstName = ko.observable("");
    this.lastName = ko.observable("");
    this.fullName = ko.computed(function() {
        return this.firstName() + " " + this.lastName()
    }, this);
}

ko.applyBindings(new AppViewModel());

有一段时间我无法弄清楚为什么fullName变量没有正常工作。但后来我注意到我需要返回this.firstName()而不是返回this.firstName。为什么会那样?它只是一个奇怪的JavaScript约定还是有一些原因呢?我想了解更多有关JavaScript和Knockout的信息,这是我自己喜欢的原因,这也是我通过Knockout教程的原因。

1 个答案:

答案 0 :(得分:2)

  

为什么会那样?它只是一个奇怪的JavaScript惯例或者是   有什么理由吗?

就是这样,因为this.firstName是一个可观察的函数。如果您想获得它的价值,您应该对其进行评估this.firstName()。然而,如果你想设置它的值,你应该传递一个值this.firstName("HandlerThatError")。这是knockout.js中可观察者的工作方式。

关于this.fullName,这是一个计算的可观察量。 this.fullNamethis.firstNamethis.lastName之间的主要区别在于this.fullName的值取决于其他两个可观察值的值,而this.firstName的值}和this.lastName没有。因此,这称为计算可观察量。

来自knockout.js documentation

  

KO如何知道视图模型的某些部分何时发生变化?答:你需要   将模型属性声明为可观察对象,因为它们是   可以通知订阅者有关更改的特殊JavaScript对象,   并且可以自动检测依赖关系。

此外,

  

要读取observable的当前值,只需调用observable即可   没有参数。

  

要为observable写一个新值,请调用observable并传递   新值作为参数。