viewModel是函数还是对象变量?

时间:2012-09-23 20:21:00

标签: javascript mvvm knockout.js

  

可能重复:
  Difference between knockout View Models declared as object literals vs functions

我在Knowckout MVVM框架中工作,我是新手。我一直在使用它一个半月,到目前为止一直很好。现在,我在网上和其他任何地方看到的所有示例都将viewmodel定义为具有如下声明的Object变量:

var ViewModel = {};

这是完全可以理解的。但是

最近我看到了一些代码模型,它被声明为函数:

某些人喜欢

var ViewModel = function(){
self = this;

// some code in conventions with var member = {} instead of member:{}

}

不仅如此,当实际使用视图模型时,他们必须实例化视图模型。

我认为它是表示viewmodel的全新方式,我没有看到它比传统的ViewModel声明方法更好。

有人可以对此有所了解吗?

2 个答案:

答案 0 :(得分:1)

这个答案解释了使用对象文字和定义视图模型的函数之间的区别:Difference between knockout View Models declared as object literals vs functions

答案 1 :(得分:0)

这是更好的,因为ViewModel的整个逻辑可以包含在(由此封装)此构造函数中。逻辑可能非常复杂。它可以包括新函数的定义和不再全局的变量。

我发现以下模式:

ko.applyBindings((function() {

    // Define local variables and functions that view model instance can access and use,
    // but are not visible outside this function.

    var firstName = ko.observable("John");
    var lastName = ko.observable("Doe");

    var getFullName = function() {
        return firstName() + " " + lastName();
    };

    // Return view model instance.
    return {
        fullName : ko.computed(getFullName)
    };

})());

更好,因为它不会引入任何新的全局变量(如构造函数),并且仍然具有很好的封装功能。