Javascript 查看Knockout.js的模型声明。有两种方法

Javascript 查看Knockout.js的模型声明。有两种方法,javascript,mvvm,knockout.js,viewmodel,knockout-validation,Javascript,Mvvm,Knockout.js,Viewmodel,Knockout Validation,我正在为富客户端应用程序使用Knockout.js,它将由大量Knockout.js视图模型组成。在开发过程中,我注意到创建knockout.js视图模型的两种方法。 第一条路 function AppViewModel() { this.firstName = ko.observable("Bert"); this.lastName = ko.observable("Bertington");} 第二条路 var appViewModel = { this.firstName = ko.ob

我正在为富客户端应用程序使用Knockout.js,它将由大量Knockout.js视图模型组成。在开发过程中,我注意到创建knockout.js视图模型的两种方法。 第一条路

function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");}
第二条路

var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")};
这两种声明ViewModels的方法有什么特别的区别吗? 在这方面,他们使用了第一种方法。但在第三方框架中,如使用了第二种方法。我应该用哪种方式?使用它有什么特别的优势吗

我发现如果我使用第一种方法,那么我就不能使用Knockout-validations.js框架。在这件事上我真的很困惑。如有任何评论,我们将不胜感激


谢谢。

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

var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")};
第二种方法是使用对象初始值设定项语法,它在内存中实例化一个新对象,并将其设置为任何字段。一般来说,这会产生较小的代码大小;如果要创建两个结构相同或相似的对象,请使用第一种方法

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

这:

创建与此相同的对象:

var appViewModel = {
    this.firstName = ko.observable("Bert"),
    this.lastName = ko.observable("Bertington")
};

第一种方法只允许创建更多的AppViewModel,例如新的AppViewModel(“Joe”、“Shmoe”)

您所描述的差异并不特定于knockout或knockout的库,而是JavaScript社区中广泛讨论的语言级别的问题。JavaScript大师道格拉斯·克罗克福德(Douglas Crockford)在这两方面都有两篇文章:


从分散的论坛帖子、博客文章以及与JavaScript程序员的对话来看,社区似乎倾向于采用原型风格。你应该用你喜欢的款式。基于文档,看起来淘汰验证库的设计考虑到了古典风格。在本例中,经典样式的优点是更容易与淘汰验证库一起使用。原型方法的缺点是很难与此库一起使用。

下面是另一个可能有帮助的链接: