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

What are the differences between declaring a KnockoutJS model with self-invoking function?

本文关键字:模型 什么 区别 KnockoutJS 声明 调用 函数      更新时间:2023-09-26

我看到视图模型被声明为函数。我猜这是因为它可以更容易地引用闭包中的其他函数和变量吗?如果它是一个简单的键/值对象,则不能使用"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视图模型兼容,我是否应该使用它?

在您的第一个示例中,您正在声明vm1对象的一个新实例,这个实例指的是vm1实例

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

然后是的,回答您自己的评论——第二个例子将只在窗口对象中创建一个名为mydata的属性。