单例声明的差异
Differences in singleton declarations
我很难理解以下单例声明的区别:
var Database = {
hostname : "db1",
opendatabase : function() {
//some code here
}
}
和
var Database = (function () {
var hostname = "db1";
return {
opendatabase : function () {
//some code here
}
}
}());
正如在注释中指出的那样,第二个代码示例无效。这是因为最外层的花括号。正确的做法是:
var Database = (function() {
var hostname = "db1";
return {
opendatabase : function() {
//some code here
}
};
})();
也就是说,两个代码示例之间有一个主要区别。在第一个示例中,hostname
是对象的属性,这意味着以下代码将是有效代码:
console.log(Database.hostname); //outputs "db1"
在第二个示例中,hostname
是一个私有变量,这意味着它不能在数据库构造函数之外访问:
console.log(Database.hostname); //outputs undefined
首先,一个小小的语法更正。第二个代码片段应该是
var Database = (function () {
var hostname = "db1";
return {
opendatabase : function () {
//some code here
}
}
}());
这两个singleton的区别在于,在第一个singleton中,每个人都可以用Database.hostname = 'I changed your stuff';
更改hostname
,而在第二个singleton中,只有Database
的函数可以访问hostname
,因为它是在匿名函数中声明的。
相关文章:
- 和兼容的单例骨干模型
- 有状态单例模块
- 在什么情况下我们需要在javsacript中实现单例类
- 如何将一个单例传递给另一个对象,使该对象的所有实例都引用同一个单实例
- 使用Ext.Ajax.request使ExtJS单例返回对象
- 原始值被称为单例的现象是什么?
- AngularJS 模式单例在服务中未更新视图
- 创建命名空间 Javascript 单例类的对象
- 流星.js单例确认框
- Javascript 单例模式
- 如何将 AMD 模块从单例转换为实例
- 为什么这个javascript单例方法有效
- 扩展现有单例
- JavaScript 对象的单例行为
- ES2015 单例或服务提供商或模块,用于敲除.js组件
- 如何在 chrome 开发者控制台中查看在 DOJO 中创建的单例对象
- 在单例模式中引用变量的根父级
- XHR 上传功能的单例引用不起作用
- 角示波器单例
- 单例声明的差异