在 JavaScript 和 knockout.js 中,为什么我不能 return 变量?为什么我必须 return 变量就好像它是一个方法一样?
In JavaScript and knockout.js, why can't I return a variable? Why must I return the variable as if it's a method?
考虑这段代码:
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 变量不能正常工作。但后来我注意到我需要 return this.firstName() 而不是 return this.firstName。为什么会这样?这只是一个奇怪的 JavaScript 惯例还是有什么原因?我想了解更多关于 JavaScript 和 Knockout 的知识,以便我自己享受,这就是我阅读 Knockout 教程的原因。
Why is it that way? Is it just a strange JavaScript convention or is
there some reason for it?
是这样的,因为this.firstName
是一个observable,一个函数。如果你想得到它的价值,你应该评估它,this.firstName()
。然而,如果你想设置它的值,你应该在其中传递一个值 this.firstName("HandlerThatError")
。这就是 Observables 在 knockout.js
中的工作方式。
关于 this.fullName
,这是一个计算的可观测值。 this.fullName
和 this.firstName
、this.lastName
之间的主要区别在于 this.fullName
的值取决于其他两个可观察值的值,而 this.firstName
而 this.lastName
没有。因此,这称为计算可观察量。
来自knockout.js
documentation:
How can KO know when parts of your view model change? Answer: you need
to declare your model properties as observables, because these are
special JavaScript objects that can notify subscribers about changes,
and can automatically detect dependencies.
此外,
To read the observable’s current value, just call the observable with
no parameters.
和
To write a new value to the observable, call the observable and pass
the new value as a parameter.
考虑这段代码:
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 变量不能正常工作。但后来我注意到我需要 return this.firstName() 而不是 return this.firstName。为什么会这样?这只是一个奇怪的 JavaScript 惯例还是有什么原因?我想了解更多关于 JavaScript 和 Knockout 的知识,以便我自己享受,这就是我阅读 Knockout 教程的原因。
Why is it that way? Is it just a strange JavaScript convention or is there some reason for it?
是这样的,因为this.firstName
是一个observable,一个函数。如果你想得到它的价值,你应该评估它,this.firstName()
。然而,如果你想设置它的值,你应该在其中传递一个值 this.firstName("HandlerThatError")
。这就是 Observables 在 knockout.js
中的工作方式。
关于 this.fullName
,这是一个计算的可观测值。 this.fullName
和 this.firstName
、this.lastName
之间的主要区别在于 this.fullName
的值取决于其他两个可观察值的值,而 this.firstName
而 this.lastName
没有。因此,这称为计算可观察量。
来自knockout.js
documentation:
How can KO know when parts of your view model change? Answer: you need to declare your model properties as observables, because these are special JavaScript objects that can notify subscribers about changes, and can automatically detect dependencies.
此外,
To read the observable’s current value, just call the observable with no parameters.
和
To write a new value to the observable, call the observable and pass the new value as a parameter.