将KnockoutJS模型声明为自调用函数有什么区别?

时间:2012-03-26 11:10:27

标签: javascript knockout.js

我已经看到视图模型被声明为函数。我猜这是因为它更容易引用闭包内的其他函数和变量?如果它是一个简单的键/值对象,则不能使用“this”来引用其他变量/函数。

但是,有两种方法可以使用函数声明模型。

var vm1 = function () {
     this.mydata = ko.observable(null)
}

ko.applyBindings(new vm1());

然后还使用自调用函数:

var vm2 = function () {
     this.mydata = ko.observable(null)
}();

ko.applyBindings(vm2);

两种方法有什么区别?我发现使用第二种方法会导致问题,因为我不确定KO是否可以“看到”vm2中的属性,因为它们是私有的。但那么vm1中的属性如何可见?

我也想知道'揭示模块'模式是否与KO视图模型兼容,以及我是否应该使用它?

1 个答案:

答案 0 :(得分:0)

在第一个示例中,您声明了一个vm1对象的新实例,并且这引用了vm1实例

在第二个例子中,这指的是窗口对象而不是vm2的实例

然后回答你自己的评论,第二个例子只会在window对象中创建一个名为mydata的属性。