JavaScript:模块模式差异

标签 javascript design-patterns

有什么区别

var module = (function(){
    return {} 
})()

(function(context){
    var module = {}
    context.module = module;
})(this)

最佳答案

this 的属性不等同于变量。在全局范围内(即 this 引用 window 的地方),它们是相似的。然而,例如,当您尝试 delete 时,它们会有不同的行为。他们:

> this.module = {};
> delete this.module
true
> var module = {};
// cant be deleted

除此之外,这两个代码片段都创建了一个空对象,包裹在一个闭包中,您可以在闭包中定义局部(私有(private))变量/函数等。在您的第二个函数中,该对象也被分配给局部变量 module,但这也可以在第一个中完成。


@Eric:你的方法,使用 new operator , 类似于关于变量的第一个。但是,它将创建该匿名函数的一个实例,而不是返回一个普通对象。它将从自定义原型(prototype)继承属性,因此例如 module.constructor 将指向匿名函数(它不能被垃圾收集,但例如甚至可以重用以创建一个克隆)。我不建议使用它。

关于JavaScript:模块模式差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12132415/

相关文章:

javascript - 正则表达式解析 URL 中的术语

javascript - 使用 JavaScript/JQuery 通过 AJAX 传递数组

java - 我应该使用对象来避免方法重载还是方法重载更好?

ruby-on-rails - 什么是 DCI,它如何适应 Rails?

javascript - 循环order.find、收集并向前端发送大量数据。方法不好?

javascript - 用户显示高度

javascript - 如何纠正 LeaderLine 中颠倒的标签?

c - 如何在c中的另一个函数之前和之后执行公共(public)代码?

c++ - 具有结构的构建器模式

c++ - 用C++设计文件传输协议(protocol)