为什么要使用立即调用的函数来创建新对象
Why use an immediately invoked function to create a new object?
在我正在读的一本名为可测试JavaScript的书中,使用了以下代码模式(忽略细节):
var Obj = (function() {
return function() {
var docRoot = '/somewhere';
this.validateDocRoot = function(val) {
// validation logic - throw Error if not OK
};
this.setDocRoot = function(val) {
this.validateDocRoot(val);
docRoot = val;
};
this.getDocRoot = function() {
return docRoot;
};
};
}());
var myObject = new Obj();
但是,为什么要将Obj视为一个立即调用的函数呢?也就是说,这个模式和下面的代码模式有什么区别:
var Obj = function() {
var docRoot = '/somewhere';
this.validateDocRoot = function(val) {
// validation logic - throw Error if not OK
};
this.setDocRoot = function(val) {
this.validateDocRoot(val);
docRoot = val;
};
this.getDocRoot = function() {
return docRoot;
};
};
var myObject = new Obj();
myObject
在这两种情况下不都是一样的吗?
您的示例中没有任何区别。通常立即调用的函数用于实现模块模式(http://addyosmani.com/resources/essentialjsdesignpatterns/book/#modulepatternjavascript)这有助于封装您不希望在全局范围内的数据。
您的示例可以重写为
var myObject = (function() {
var docRoot = '/somewhere';
return {
validateDocRoot : function(val) {
// validation logic - throw Error if not OK
},
setDocRoot : function(val) {
this.validateDocRoot(val);
docRoot = val;
},
getDocRoot : function() {
return docRoot;
}
};
}());
在这种情况下,使用立即调用的函数是非常重要的。在您的第一个示例中,它只添加了语法噪声。
相关文章:
- 查找关键字并创建新对象
- 创建新对象时,为什么要更新旧对象
- 为什么要使用立即调用的函数来创建新对象
- 从分析类传递现有对象,否则创建一个新对象
- 从数组javascript创建新对象
- 在for循环-Javascript中创建新对象
- 确定是创建新对象还是更新现有对象
- 如何使用Typescript创建一个包含对象的字段的新对象
- JavaScript:创建新对象类型的方法
- 创建新对象后,如何防止丢失旧对象
- 为什么可以't在创建新对象时引用旧对象
- 在原始对象的基础上创建新对象的最简单方法,但没有几个字段
- 用javascript创建对象(使用新对象)有什么优点
- 重用XMLHttpRequest对象或创建一个新对象
- JavaScript创建新对象
- 如何通过从angularjs中的现有对象中选择一些数据来创建新对象
- 如何匹配两个对象之间的值并使用特定值创建新对象
- 在 Javascript 中的对象中创建新对象的最佳实践
- 在Javascript中使用新的引用创建一个新对象 - 不要复制或克隆 -
- 新对象创建问题