当我尝试创建此模块的不同实例时,它不起作用.
它似乎是一个单身人士.我一次只能有一个实例.
什么机制限制构造函数publik()只有实例?
var Module = ( function ()
{
var publik = function ( )
{
};
publik.prototype.test;
publik.prototype.get = function()
{
document.getElementById( 'a'+test ).innerHTML = test;
};
publik.prototype.set = function( value )
{
test = value;
};
return publik;
} ) ();
var object1 = new Module();
var object2 = new Module();
object1.set('1');
object2.set('2');
object1.get();
object2.get();
Run Code Online (Sandbox Code Playgroud)
模块模式并不意味着以您描述的方式使用.它用于创建一个模块并从外部代码隐藏状态,即您公开一个公共接口,外部代码可以与之通信,但您可以隐藏其余部分.
这可以防止其他代码依赖于您在内部使用的变量或函数,因为它们在重命名时会中断.
此外,模块应该是单例; 拥有多个相同的模块就像在代码中有两个相同的类......没有意义.
这就是模块模式的样子.
var Module = (function($) {
// the $ symbol is an imported alias
// private variable
var id = 0;
// private function
function increaseId()
{
return ++id;
}
// return public interface
return {
nextId: function() {
// we have access to the private function here
// as well as the private variable (btw)
return increaseId();
}
}
}(jQuery)); // we import jQuery as a global symbol
Module.nextId(); // 1
Module.nextId(); // 2
Module.id; // undefined
Module.increaseId(); // error
Run Code Online (Sandbox Code Playgroud)
您将看到如何仅.nextId()公开,但没有其他私有变量/函数.
简短的回答:关闭.
答案很长(如果我说得对,请评论,以便我可以纠正):
您的模块var在脚本加载时立即执行.(由函数周围的括号表示.)()
在该模块中,声明了publik var,即使函数完成,它也会保留在闭包中!
通过后续调用,您仍然可以访问自动执行的那个模块.它总是获得相同的闭包空间和函数范围以及相同的对象 - 简而言之 - 因此你的publik变量实际上总是相同的.
| 归档时间: |
|
| 查看次数: |
4615 次 |
| 最近记录: |