在淘汰赛中,我看到View Models声明为:
var viewModel = {
firstname: ko.observable("Bob")
};
ko.applyBindings(viewModel );
Run Code Online (Sandbox Code Playgroud)
要么:
var viewModel = function() {
this.firstname= ko.observable("Bob");
};
ko.applyBindings(new viewModel ());
Run Code Online (Sandbox Code Playgroud)
如果有的话,两者之间有什么区别?
我确实在knockoutjs google小组上找到了这个讨论,但它并没有给我一个满意的答案.
如果我想用一些数据初始化模型,我可以看到一个原因,例如:
var viewModel = function(person) {
this.firstname= ko.observable(person.firstname);
};
var person = ... ;
ko.applyBindings(new viewModel(person));
Run Code Online (Sandbox Code Playgroud)
但如果我不这样做,我选择哪种风格呢?
使用实例方法作为事件处理程序的回调改变的范围this从"我的实例"到"无论只是调用的回调".所以我的代码看起来像这样
function MyObject() {
this.doSomething = function() {
...
}
var self = this
$('#foobar').bind('click', function(){
self.doSomethng()
// this.doSomething() would not work here
})
}
Run Code Online (Sandbox Code Playgroud)
它有效,但这是最好的方法吗?这对我来说很奇怪.