是否有理由使用构造函数来构建一次性对象



在TodoMVC网站上,有一个单页应用程序的演示,用Vanilla JS编码。

Todos app - Vanilla JavaScript 示例

他们使用构造函数来构建应用程序,如下所示:

function Model() {
    ...;
}
function View() {
    ...;
}
function MyApp() {
    this.model = new Model();
    this.view = new View();
}
var todo = new MyApp();

对于单页应用程序(因此对象todo,todo.model和todo.view是唯一的),是否有充分的理由使用上述构造函数,或者它更适合仅构建这些对象而没有构造函数:

var todo = {};
todo.model = {};
todo.view = {};

而且,在这种(最简单的)模式更好的情况下,为什么TodoMVC的作者使用构造函数?

  var todo = {};

是一个没有特定类型的对象,必须手动填充,而

  var todo = new MyApp();

是类 MyApp 的对象。

如果你想扩展你的应用程序,拥有一个具体的类型对象是有意义的,然后可以利用所有OOP功能(例如继承)。

不过我不是JS专家。

他们在纯JavaScript中实现了一个小型MVC(模型/视图/控制器)框架。尽管当前应用Todo仅使用一个模型、一个控制器和一个视图,但这些组件应多次用于更大的应用程序。

您必须区分框架代码(控制器.js、模型.js、视图.js、模板.js)和实际应用程序代码(app.js)。第一个文件应该为不同的应用程序重用,而最后一个文件似乎是特定于应用程序的。

在深入研究之后,我认为一个可能的答案是,你不能在一个简单的文字对象中拥有私有变量和méthods。

皮特·柯克姆(Pete Kirkham)对这个问题的回答摘录:

如何将私有变量添加到这个Javascript对象文字片段中?

而是取决于你想对对象做什么 - 正常"私人"成员的技术意味着他们只能通过以下方式访问成员函数,并要求您使用构造函数来创建对象。文字语法用于数据结构或轻量级使用公共数据和函数对对象进行加权。

隐私

是Javascript中现代设计模式的基本元素,如果不使用函数,我们就无法拥有隐私。

最新更新