Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/453.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 是否有理由使用构造函数来构建一次性对象?_Javascript_Oop_Constructor - Fatal编程技术网

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

Javascript 是否有理由使用构造函数来构建一次性对象?,javascript,oop,constructor,Javascript,Oop,Constructor,在TodoMVC网站上,有一个单页应用程序的演示,用Vanilla JS编码 他们正在使用构造函数构建应用程序,如下所示: function Model() { ...; } function View() { ...; } function MyApp() { this.model = new Model(); this.view = new View(); } var todo = new MyApp(); 对于单页应用程序(因此对象todo、tod

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

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

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(Model/View/Controller)框架。即使当前的应用程序
Todo
只使用一个模型、一个控制器和一个视图,但这些组件对于更大的应用程序来说需要多次使用


您必须区分框架代码(controller.js、model.js、view.js、template.js)和实际应用程序代码(app.js)。第一个文件应该被用于不同的应用程序,而最后一个文件似乎是特定于应用程序的。

在深入研究之后,我认为一个可能的答案是,在一个简单的文本对象中不能有私有变量和方法

问题的摘要:

如何将私有变量添加到此Javascript对象文字片段

这取决于你想对对象做什么——正常的 “私有”成员的技术意味着他们只能通过 成员函数,并要求使用构造函数来创建 物体。文字语法用于数据结构或灯光 使用公共数据和函数加权对象


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

lilli thompson的这篇演讲提供了如何使v8优化Javascript的建议。如果我没记错的话,她给出了使用构造函数的原因。更多+1来自我:如果我记得这与v8能够更好地优化有关。在视频中,Lilli Thompson建议以后不要向对象添加属性,因为这样v8可以减少优化。不过,我们可以在不使用函数作为构造函数的情况下获得隐私。