Javascript 单例声明中的差异
我很难理解以下单例声明的区别:Javascript 单例声明中的差异,javascript,singleton,declaration,Javascript,Singleton,Declaration,我很难理解以下单例声明的区别: var Database = { hostname : "db1", opendatabase : function() { //some code here } } 及 正如注释中指出的,第二个代码示例无效。这是因为最外层的花括号。正确的做法是: var Database = (function() { var hostname = "db1"; return { opendatabas
var Database = {
hostname : "db1",
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
}
};
})();
也就是说,这两个代码示例之间有一个主要区别。在第一个示例中,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
}
}
}());
这两个单例的区别在于,在第一个单例中,每个人都可以使用
Database.hostname='I change your stuff'(我改变了你的东西)更改hostname
,但在第二个函数中,只有数据库
的函数可以访问主机名
,因为它是在匿名函数中声明的。首先,一个小的语法更正。
第二个片段应该是
var Database = (function () {
var hostname = "db1";
return {
opendatabase : function () {
//some code here
}
}
}());
这两个单例的区别在于,在第一个单例中,每个人都可以使用
Database.hostname='I change your stuff'(我改变了你的东西)更改hostname
代码>,但在第二个代码中,只有数据库
的函数才能访问主机名
,因为它是在匿名函数中声明的。第二个函数是无效的JavaScript,因为它包含语法错误。你能详细说明一下吗?好的,我修复了错误。第二个函数是无效的JavaScript,因为它包含语法错误。你能详细说明一下吗关于那件事?好吧,我搞错了。太好了。在第二个单例中,返回的函数总是相同的,还是每次都是不同的实例?在第二个单例中,包含hostname
的函数只调用一次,而opendatabase
函数也创建一次。没有多个实例。只有一个具有私有变量great的实例。在第二个单例中,返回的函数总是相同的,还是每次都是不同的实例?在第二个单例中,包含hostname
的函数只调用一次,而opendatabase
函数也创建一次。没有多个实例。只有一个带有私有变量的实例