码迷,mamicode.com
首页 > 移动开发 > 详细

js中apply和call方法

时间:2018-08-11 18:53:53      阅读:163      评论:0      收藏:0      [点我收藏+]

标签:htm   prototype   null   window   html   var   class   person   使用   

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);                                                        
	                                                                              

 

js中apply和call方法

标签:htm   prototype   null   window   html   var   class   person   使用   

原文地址:https://www.cnblogs.com/liushisaonian/p/9460585.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!