var Class = {
  create: function(){
    return function(){
this.w.apply(this,arguments);//这里的this是谁??arguments又是指向的哪个函数??
}
  }
}
var a=Class.create()//这句有什么用???
a.prototype={
w:function(x){
alert(x)
}
}

解决方案 »

  1.   


        var Class = {
      create: function(){
        return function(){
            this.w.apply(this,arguments);//this表示作用域,从上下文来看,应该是a;arguments是指你传入参数的集合,是一个数组。
        }
      }
    }
    var a=Class.create() 创建一个匿名函数,this指针指向这个函数,并把this指针赋值给a.
    a.prototype={
        w:function(x){
            alert(x)
        }
    }
      

  2.   

    function中的this只有当被调用的时候才有意义。
    var a = Class.create();
    此时 a = function(){ this.w.apply(this.arguments) }之后指定了a的prototype。如果 var a = new a(),则会复制这个prototype并调用构造器 a,调用a则调用当前复制出来的对象中的w方法(这句 this.w.apply(this,arguments) apply是Function类型的原型方法,意为在指定的对象为作用域执行该方法)。 此时this指向这个新对象。Function类型很活,可以做为构造器,可以作为对象的成员方法,或者可以随意的指定作为某个对象的方法进行调用(call/apply),建议多看一下javascript语义原理方面的书 
      

  3.   

    最后
    new a(arguments)等于w(x)所以new a(33) 将弹出33
      

  4.   

     var a=function(){this.b()}
     a.prototype={
      a:"aaaaa",
    b:function(){this.c="ccc"},
    d:function(x){alert(x)},
    e:function(){
    alert(this.a)//弹出aaaaa
    return function(){
    alert(this.a)//弹出function(){this.b()}
    return function(){
    alert(this.a)//弹出function(){this.b()}
    return function(){
    alert(this.a)//弹出function(){this.b()}
    }
    }
    }}
    }
    var b=new a()
    b.e()()()()
      

  5.   

     var a=function(){this.b()}
     a.prototype={
      a:"aaaaa",
    b:function(){this.c="ccc"},
    d:function(x){alert(x)},
    e:function(){
    a="1111"//覆盖了window.a
    alert(a)//弹出1111
    return function(){
    var a="22222"//如果不加var ,window.a将被覆盖为22222
    alert(a)//弹出2222
    return function(){
    // a="33333"
    alert(a)//弹出2222
    return function(){
    alert(a)//弹出2222
    }
    }
    }}
    }
    var b=new a()
    b.e()()()()
    alert(a)//弹出1111