【发布时间】:2012-03-24 06:27:25
【问题描述】:
在淘汰赛 js 中,我看到 View Models 声明为:
var viewModel = {
firstname: ko.observable("Bob")
};
ko.applyBindings(viewModel );
或:
var viewModel = function() {
this.firstname= ko.observable("Bob");
};
ko.applyBindings(new viewModel ());
如果有的话,两者有什么区别?
我确实在 knockoutjs google 群组上找到了this discussion,但它并没有真正给我一个满意的答案。
如果我想用一些数据初始化模型,我可以看到一个原因,例如:
var viewModel = function(person) {
this.firstname= ko.observable(person.firstname);
};
var person = ... ;
ko.applyBindings(new viewModel(person));
但如果我不这样做,我选择哪种风格重要吗?
【问题讨论】:
-
我认为没有区别。我通常使用构造函数模式,因为我经常有我喜欢在
prototype上声明的方法(例如,经常从服务器获取数据并相应地更新视图模型的方法)。但是,您仍然可以明显地将它们声明为对象文字的属性,所以我看不出有什么区别。 -
这与淘汰赛无关,一切都与 JavaScript 中自定义对象的实例化容易程度有关
-
@Kev 如果 viewModel 是一个构造函数,你可以用大写来写它,就像 var PersonViewModel = function(){...};