一、js中的this不一定是自我;
案例一:
<script> function WhoAmI(){ // 定义一个函数WhoAmI alert("I'm " +this.name+" of "+typeof(this)); }; //此时this的根对象window,其name属性为空字符串。输出:I'm of object WhoAmI(); var BillGates = {name:"Bill Gates"}; BillGates.WhoAmI = WhoAmI; //将函数WhoAmI作为BillGates的方法; BillGates.WhoAmI(); //this是BillGates. //输出:I'm Bill Gates of object var SteveJobs = {name:"Steve jobs"}; SteveJobs.WhoAmI = WhoAmI; //将函数WhoAmI作为SteveJobs的方法 SteveJobs.WhoAmI(); //此时this是SteveJobs; //输出:I'm Steve jobs of object WhoAmI.call(BillGates); //直接将BillGates作为this,调用WhoAMI. //输出:I'm Bill Gates of object WhoAmI.WhoAmI = WhoAmI; //将WhoAmI函数设置为自身的方法 WhoAmI.name = "WhoAmI"; WhoAmI.WhoAmI(); //此时的this是WhoAmI函数自己。输出:I'm WhoAmI of function ({name:"nobody",WhoAmI:WhoAmI}).WhoAmI(); //创建一个匿名函数并调用其方法;输出:I'm nobody of object </script>
注:1、从上面的代码看出,同一个函数可以从不同的角度来调用,this并不一定是函数本身所属的对象。this只是在任意对象和function元素结合时的一个概念,这种结合比起一般对象语言的默认结合更加灵活显得更加灵活和洒脱。
2、在js中,只能把this看成当前要服务的“这个”对象。this是一个特殊的内置参数,根据this参数,您可以访问到“这个”对象的属性和方法,但却不能给this参数赋值。在一般对象语言中,方法体代码中的this可以省略,成员默认都要首先是自己的,在js却不同,由于不存在“自我”,当访问“这个”对象时,this不可省略。
3、js提供了传递参数的多种形式和手段,其中,像BillGates.WhoAmI();这种形式是传递this参数最正规的形式;此时的this就是函数所属的对象本身。