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()
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()
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的兴趣,
应该无论你调用多少次都不会弹出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是有返回值的!
是一个对象.但不是函数对象.
以为他不能运行.