在JS中,call()方法和apply()方法到底该怎么应用?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在JS中,call()方法和apply()方法到底该怎么应用?相关的知识,希望对你有一定的参考价值。

1.apply与call是更改对象的内部指针,即改变对象的this指向的内容;

2.call与apply的第一个参数都是要传入给当前对象的对象,及函数内部的this,后面的参数都是传递给当前对象的参数。

详细用法如下:

1.call()

语法:obj1.call(obj2[,param1,param2,...]);
定义:用obj2对象来代替obj1,调用obj1的方法。即将obj1应用到obj2上;
说明:call 方法可以用来代替另一个对象调用一个方法,call 方法可将一个函数的对象上下文从初始的上下文改变为由 obj2 指定的新对象,如果没有提供 obj2参数,那么 Global 对象被用作 obj2。 

2.apply()

语法:obj1.call(obj2[,arrArg]);
定义:用obj2对象来代替obj1,调用obj1的方法,即将obj1应用到obj2上,
说明:call ()和apply()作用一样,但是call()可以接收任何类型的参数,而apply()只能接收数组参数。

3.基本用法

4.继承特性

参考技术A 给楼主一个链接,看完绝对知道它们的用法:

http://blog.csdn.net/qianzai5765638/article/details/6952321本回答被提问者采纳

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

 

以上是关于在JS中,call()方法和apply()方法到底该怎么应用?的主要内容,如果未能解决你的问题,请参考以下文章

js中call和apply的区别

js中callapply和bind到底有什么区别?

JS中 call和apply的区别和作用

JavaScript call 和apply 的理解

关于JS中apply和call详细解答

js中apply和call方法