var a=function(){alert(this.c)}
var b=function(){
var c = this.c, d = this.d;
this.c = d; this.d ="sss";
var ss=a.apply(this,arguments)//调用几次?怎样调用 才能弹出ddd???
this.d = d; this.c = c;
return ss
}
var bb=new b()

解决方案 »

  1.   

    <script language="javascript" type="text/javascript">
    var a=function(){alert(this.c)}var b=function(){
        var c = this.c, d = this.d;
        this.c = d; 
        this.d ="sss";
        var ss=a.apply(this,arguments);//调用几次?怎样调用 才能弹出ddd???
        this.d = d; this.c = c;
        return ss
    }
    var bb=new b();
    </script>弹出除了undefine外没有其他的,搞不懂,做这些头晕,另人费脑,超级没用的例子,简直是打击人对JavaScript的兴趣,
      

  2.   

    很有趣.
    应该无论你调用多少次都不会弹出sssvar a=function(){alert(this.c)}
    var b=function(){
        var c = this.c, d = this.d;
        this.c = d; this.d ="sss";
        var ss=a.apply(this,arguments)
    /* 
     * this.c始终指向new Function b中的实例对象属性d也就是this.d
     * 所以无论你调多少次a.apply或者new b,每次都是一个新的对象中的this.d
     * 而且你每次赋值(字符串)都是最基础的数据类型(undefined看来也算一种最基础的类型,或者他真的就是一个字符串).
     * 所以他们是真正的赋值.不是赋地址.当this.d="sss"时.this.d就真的变成了"sss".
     * 但前面赋this.c=d的this.c则不会改变.就向我们平时用的.
     * c=5;b=c;a=b;b=3; 一样,他们是真正的赋值.a=5,b=3,c=5
     */
        this.d = d; this.c = c;
        return ss
    }
    var bb=new b()不过有一个地方我搞不明白.apply的返回值是个什么对象
    一般函数没写return xxx的话.是没返回值的.
    所以直接alert(xxx())的话.弹出的是undefined
    但是apply是有返回值的!
    是一个对象.但不是函数对象.
    以为他不能运行.