闭包对象创建:这两种方法的优点/缺点是什么
Closure Object Creation: What are the advantages/disadvantages of these two approaches?
我见过这两种创建带有闭包的js对象的方法,但不确定使用一种方法是否比另一种方法有任何优势:
1.)使用新的
var myObject = new function() {
// ...
this.foo = 'bar';
};
2.)使用自执行匿名
var myObject = (function() {
// ...
return {
foo: 'bar'
};
} ());
我读过一些关于方法1需要分配this
的开销的文章,但我不确定这一说法是否与方法2类似,或者与不返回的自执行匿名函数相比。
就我个人而言,我认为第一个语法看起来更易于维护,但这可能只是个人偏好。
第一条语句提供了一个完整的Object实例-尽管这是唯一可能的实例,因为构造函数可以使用一次-第二条语句提供一个对象文本。在这种情况下,我看不出有多大区别,两者都可以称为"一次性实例模式"。第一种模式(对我来说)的唯一优势是我的编辑器(KomodoEdit 6.1)可以使用intellisense(它识别myObject并"知道"它的属性)。也许第一种模式的另一个优点是可以为其定义原型方法(如果您命名匿名函数):
var myObject = new function myObj() {
this.foo = 'bar';
myObj.prototype.getFoo = function() { return this.foo; }
myObj.prototype.setFoo = function(v){ this.foo = v || this.foo; return this; }
};
但这可能不适用于所有浏览器。
我最终进行了一些进一步的搜索,并在比较几种实例化方法时发现了这一点:
http://jsperf.com/new-vs-literal/4
似乎使用new function() {};
模式的明显较慢
相关文章:
- 这是什么 ==- javascript 运算符
- 我的单元测试选项是什么
- 什么'最合适的数据结构是什么?(使用一个有间隙的数组是否存在缺点或注意事项?)
- 将Jquery UI与AngularJS一起使用的优点和缺点是什么?
- 使用javascript构建整个网页的缺点是什么
- 与Electron相比,Chrome应用程序的优点和缺点是什么
- 在使用 Jasmine 进行单元测试时,javascript 揭示模块模式的缺点是什么?
- 同时具有网络视图和本地视图的混合应用程序的优点和缺点是什么
- SAPUI5:作为应用程序包装器的容器,sap.m.Shell和sap.m.App的优点和缺点是什么
- 将javascript调用为HTML php样式的缺点(和优点)是什么?
- 使用meteor.js的(潜在)缺点是什么?
- 在数组上设置字符串属性的缺点是什么?
- 如果有的话,使用对象作为数组索引的缺点是什么?
- HTML、JavaScript和CSS最小化的缺点是什么?
- 与官方标准application/ JSON相比,将JSON数据作为文本/javascript提供的优点和缺点是什么?
- 闭包对象创建:这两种方法的优点/缺点是什么
- 在 JavaScript 中创建函数对象的优点/缺点是什么?
- 从外部角度调用$digest的缺点是什么
- 只有Json的web应用程序.缺点是什么?(或专业)
- 以下数据提交方法的缺点是什么?