在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(); 

解决方案 »

  1.   

    单例模式,第一次调用是new的对象,后面的只是获得这个对象的实例而已
    楼上正解
      

  2.   

    Mark一下,just Another Singletonfunction Singleton() {
    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);
      

  3.   

    function singleton() { 
      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  所以
      

  4.   

    应该这么说//第一次执行的时候
    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;
      

  5.   

    问一个低级问题啊 arguments.callee这些属性在哪找的啊 哪本书有 还是网上的
      

  6.   


      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);
      

  7.   

    12楼 你怎么就像我jb上那个hui似的
      

  8.   

    问一个低级问题啊 arguments.callee这些属性在哪找的啊 哪本书有 还是网上的