我使用Knockout.js作为富客户端应用程序,它将包含大量的knockout.js ViewModels。在开发过程中,我注意到了两种创建knockout.js ViewModels的方法。 第一种方式。
function AppViewModel() {
this.firstName = ko.observable("Bert");
this.lastName = ko.observable("Bertington");}
第二种方式。
var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")};
这两种声明ViewModel的方法有什么特别的区别吗? 在knockout.js official page examples他们使用了第一种方式。但在像Knockout-validations.js这样的第三方框架中使用了第二种方式。我应该使用哪种方式?使用它有什么特别的优势吗?
我发现如果我使用第一种方式,那么我不能使用Knockout-validations.js框架。我真的很困惑这个问题。任何评论都表示赞赏。
谢谢。
答案 0 :(得分:3)
第一种方式定义了一个对象构造函数但没有实例化一个新对象,你可以用这种方式传入参数。如果你正在创建多个对象/模型,那肯定会比第二种方式更少笨重。
第二种方法是使用对象初始化器语法,这会在内存中使用您设置的任何字段实例化一个新对象。通常,这会产生较小的代码大小;如果你要创建两个相同或相似结构的对象,请使用第一种方法。
没有理由不能使用第一个代替第二个。只需创建一个新对象并将其传递到任何需要的地方。
此:
function AppViewModel(fName, lName) {
var self = this;
self.firstName = ko.observable(fName);
self.lastName = ko.observable(lName);
}
...
var appViewModel = new AppViewModel("Bert", "Bertington");
创建与此相同的对象:
var appViewModel = {
this.firstName = ko.observable("Bert"),
this.lastName = ko.observable("Bertington")
};
第一个只允许创建更多AppViewModel
个,例如new AppViewModel("Joe", "Shmoe")
答案 1 :(得分:2)
您所描述的差异并非针对淘汰赛或淘汰赛的图书馆,而是一个在JavaScript社区中广泛争论的语言级问题。 JavaScript大师道格拉斯·克罗克福德(Douglas Crockford)有两篇关于此事的文章:
从分散的论坛帖子,博客文章以及与JavaScript程序员的对话中,社区似乎趋向于采用原型风格。你应该使用你喜欢的任何一种风格。根据文档,看起来Knockout-Validation库的设计考虑了经典风格。在这种情况下,经典样式的优点在于它更容易与Knockout-Validation库一起使用。原型方法的缺点是它很难与这个库一起使用。