首页 > 代码库 > this关键字的指向

this关键字的指向

    javascript 的this关键字总是指向一个对象,具体指向哪个对象是在运行基于函数的执行环境动态绑定的,而非函数被声明时的环境。this的指向除去with和eval的情况,具体的指向大致分为四种

  1.作为对象的方法调用。

  2.作为普通函数调用

  3.构造器的调用

  4.Fun.prototype.call 或 Fun.prototype.apply

//  1.在javascript中作为对象的方法被调用,this指向该对象
       	var obj = {
       		a:1,
       		getA : function(){
       			console.log(this === obj);
       			console.log(this.a);
       		} 
       	};
       	obj.getA();  //对象调用方法 this指向对象  输出1

  

// 2.在javascript中作为普通函数被调用,this指向全局对象
       	   window.name = "wu";
       	   var myObject = {
       	   	  name:"seen",
       	   	  getName : function(){
       	   	  	return this.name;
       	   	  }
       	   };

       	    console.log(myObject.getName());   //输出  seen

       	    var getName1 = myObject.getName;
       
console.log(getName1()); //this指向全局 输出 wu

  

  

//3构造器调用  构造器中的this指向返回的这个对象
            var MyClass =function() {
            	this.name = "seen";
            };

            var obj = new MyClass();  //this指向本身
            console.log(obj.name);    //输出seen

 //4 apply call可以动态改变函数传入的th           var obj1 = {

           	  name:"sevn",
           	  getName: function(){
           	  	return this.name;
           	  }
           }; 

           var obj2 ={
           	  name:"anne"
           };
           console.log(obj1.getName());           //输出sevn
console.log(obj1.getName.call(obj2)); //输出anne
console.log(obj1.getName.apply(obj2)); //输出sanne

                   call(a,b) apply(a,b) 均接受两个参数 ,a是this对象的指向 ,b是带下标的集合,可以是数组
                    call中的b参数要一个个全部列出,例如 call(a,1,2,3)
                    apply中的b参数传入数组 例如 apply(a,[1,2,3])
                  可以用arguments代替apply(a,arguments)      apply的使用比call要多

  

 

this关键字的指向