在JavaScript和knockout.js中,为什么可以'我不返回一个变量吗?为什么我必须返回变量,就好像它

In JavaScript and knockout.js, why can't I return a variable? Why must I return the variable as if it's a method?

本文关键字:为什么 变量 返回 一个 js knockout JavaScript      更新时间:2023-09-26

考虑以下代码片段:

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教程的原因。

为什么是那样?这只是一个奇怪的JavaScript约定,还是有什么原因吗?

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

关于this.fullName,这是一个计算的可观测值。this.fullNamethis.firstNamethis.lastName的主要区别在于,this.fullName的值取决于另外两个可观察器的值,而this.firstNamethis.lastName的值则不依赖。因此,这被称为计算可观测。

来自knockout.js文档:

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

此外,

要读取可观测值的当前值,只需用没有参数。

要给可观测值写一个新值,请调用可观测值并通过将新值作为参数。