js中apply和call方法

1.apply的使用,call的使用改变this对象

//apply和call使用
	function Person(age,sex){
		this.age=age;
		this.sex=sex;
	}
	//通过原型添加方法
	
	Person.prototype.sayHi=function(x,y){
		console.log("你好啊"+this.sex);
		return 1000;
	}
	var person=new Person(10,"男");
	person.sayHi();
	//
	function Student(name,sex){
		this.name=name;
		this.sex=sex;
	}
	//此时改变了原型对象的问题,
	var stu=new Student("小明","人妖");
	var r1=person.sayHi.apply(stu,[10,20]);//改变了this对象给stu添加了sayHi对象
	var r2=person.sayHi.call(stu,10,20);

  

2.apply和call使用总结

 //apply和call的使用方法
    /*
    * apply的使用语法
    * 函数名字.apply(对象,[参数1,参数2,...]);
    * 方法名字.apply(对象,[参数1,参数2,...]);
    * call的使用语法
    * 函数名字.call(对象,参数1,参数2,...);
    * 方法名字.call(对象,参数1,参数2,...);
    *
    * 作用:改变this的指向
    * 不同的地方:参数传递的方式是不一样的
    *
    * 只要是想使用别的对象的方法,并且希望这个方法是当前对象的,那么就可以使用apply或者是call的方法改变this的指向
    *
    * */
//apply和call都可以改变this的指向                                                        
    //函数的调用,改变this的指向                                                           
        function f1(x,y) {                                                      
          console.log((x+y)+":===>"+this);                                      
          return "这是函数的返回值";                                                    
        }                                                                       
        //apply和call调用                                                          
        var r1=f1.apply(null,[1,2]);//此时f1中的this是window                         
        console.log(r1);                                                        
        var r2=f1.call(null,1,2);//此时f1中的this是window                            
        console.log(r2);                                                        
        console.log("=============>");                                          
       // 改变this的指向                                                             
        var obj={                                                               
          sex:"男"                                                               
        };                                                                      
      //  本来f1函数是window对象的,但是传入obj之后,f1函数此时就是obj对象的                             
        var r3=f1.apply(obj,[1,2]);//此时f1中的this是obj                             
        console.log(r3);                                                        
        var r4=f1.call(obj,1,2);//此时f1中的this是obj                                
        console.log(r4);                                                        
	                                                                              

猜你喜欢

转载自www.cnblogs.com/liushisaonian/p/9460585.html