Knockout.js的视图模型声明.有两种方法

Thi*_*ena 5 javascript mvvm viewmodel knockout.js knockout-validation

我使用Knockout.js作为富客户端应用程序,它将包含大量的knockout.js ViewModels.在开发过程中,我注意到了两种创建knockout.js ViewModels的方法.第一种方式.

function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");}
Run Code Online (Sandbox Code Playgroud)

第二种方式.

var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")};
Run Code Online (Sandbox Code Playgroud)

这两种声明ViewModels的方法有什么特别的区别吗?在knockout.js官方页面示例中,他们使用了第一种方式.但在第三方框架中,如Knockout-validations.js已采用第二种方式.我应该使用哪种方式?使用它有什么特别的优势吗?

我发现如果我使用第一种方式,那么我不能使用Knockout-validations.js框架.我真的很困惑这个问题.任何评论表示赞赏.

谢谢.

小智 3

第一种方式定义了一个对象构造函数,但不实例化一个新对象,您可以通过这种方式传入参数。如果您要创建多个对象/模型,这肯定不会比第二种方式笨重。

第二种方法是使用对象初始值设定项语法,这会使用您设置的任何字段在内存中实例化一个新对象。一般来说,这会产生较小的代码大小;如果您要创建两个结构相同或相似的对象,请使用第一种方法。

您没有理由不能使用第一个来代替第二个。只需创建一个新对象并将其传递到需要的地方即可。

这:

function AppViewModel(fName, lName) {
    var self = this;
    self.firstName = ko.observable(fName);
    self.lastName = ko.observable(lName);
}
...
var appViewModel = new AppViewModel("Bert", "Bertington");
Run Code Online (Sandbox Code Playgroud)

创建与此相同的对象:

var appViewModel = {
    this.firstName = ko.observable("Bert"),
    this.lastName = ko.observable("Bertington")
};
Run Code Online (Sandbox Code Playgroud)

第一个只允许AppViewModel创建更多 s,例如new AppViewModel("Joe", "Shmoe")