在singleton()第一次执行的过程中,这个函数就被改掉了。
function singleton() {
function s() {}
var i = new s(); // 这里把singleton函数换了,以后每次执行singleton()都是直接返回singleton.instance
singleton = function() {
return singleton.instance;
} // 唯一的一个实例被保存在singleton.instance
singleton.instance = i; // 直接返回singlton.instance
return singleton();
}
function singleton() {
function s() {}
var i = new s(); // 这里把singleton函数换了,以后每次执行singleton()都是直接返回singleton.instance
singleton = function() {
return singleton.instance;
} // 唯一的一个实例被保存在singleton.instance
singleton.instance = i; // 直接返回singlton.instance
return singleton();
}
解决方案 »
- 设置时间自动刷新button的disabled 属性
- 急~~~~ js 实现图片轮换效果 大侠们帮帮忙 谢谢了
- IE6中js弹出框无法弹出问题
- 如何反选
- JavaScript获取XML中的节点,XML是SOAP格式的
- 如何使与自身并行的iframe窗口后退?
- Js正则匹配标签内容
- 请问一下jcplayer播放flv视频,怎么监听播放结束?
- A beginner's QUESTIONS in JavaScript!!!! Help Me!!!URGENTLY~~~~~~~~~
- 请教Javascript高手!!!!急!!!
- 一个Javascript比较有挑战性的问题
- Image的src属性赋值之后,怎么知道这个src是不是真的来自一个图片文件?
楼上正解
var self = arguments.callee;
if(self.Created) return self.Instance;
else{
//Your Class Begins
this.Str = "Hello World!";
//Your Class Ends
self.Created = true;
self.Instance = this;
}
}var i1 = new Singleton();
var i2 = new Singleton();
alert(i1 == i2);
function s() {} //也就是 this.s=function(){};申明了一个函数
var i = new s(); //i=实例化s
singleton = function() { //this.singleton =this; 也就是 自己的singleton 函数就是本身
return singleton.instance;
}
singleton.instance = i; //然后i 也就是singleton.prototype=s;this=s;这个意思
return singleton(); 返回自己
}
var a = new singleton(); a 是自己的一个实例化 指向一个引用
var b = new singleton(); b是自己的另外一个实例化 指向同一个引用alert(a===b)//return true 所以
function singleton() {
function s() {}
//i new了一次
var i = new s();
//改写了singleton函数,但是请注意,此时并没有执行。
singleton = function() {
return singleton.instance;
} //将刚才new出来的i,赋给了singleton.instance
singleton.instance = i; //返回singleton.instance,就是刚才new的i
return singleton();
}
//第二次执行的时候
//function singleton在第一次执行时已经被改写
//所以直接返回了singleton.instance,也就是第一次i new出来的s
//所以对象是一样的。
请注意,a和b不是singleton函数,而是s;
function singleton() {
function s() {}
this.singleton = function() {
return this.instance;
}
this.instance = new s();
return singleton();
} var a = singleton();
var b = singleton();
alert(a === b);