精华内容
下载资源
问答
  • 本文实例分析了JavaScript中call和apply方法的区别。分享给大家供大家参考,具体如下: 这两个方法不经常用,但是在某些特殊场合中是非常有用的,下面主要说下它们的区别: 1、首先,JavaScript是一门面向对象的语言...
  • 在JS中,这三者都是用来改变函数的this对象的指向的,他们有什么样的区别呢。 在说区别之前还是先总结一下三者的相似之处: 1、都是用来改变函数的this对象的指向的。 2、第一个参数都是this要指向的对象。 3、都...
  • call 和apply作用区别

    万次阅读 多人点赞 2019-05-23 17:28:17
    首先先说明它们共同的作用call和apply都是用来修改函数中this的指向问题; 其次就是它们不同的传参方式:注意上一句话中说他们的作用时有两个关键词 ‘函数’‘this’,想要修改this的指向,那么必然有一个this...

    首先先说明它们共同的作用:call和apply 都是用来修改函数中this的指向问题;

    其次就是它们不同的传参方式:注意上一句话中说他们的作用时有两个关键词 ‘函数’和‘this’,想要修改this 的指向,那么必然有一个this修改后的指向,而函数必然后关系到传参问题:call方法可以传给该函数的参数分别作为自己的多个参数,而apply方法必须将传给该函数的参数合并成一个数组作为自己的一个参数:

    eg: 

    var name = 'Evan';
    var age = 20;
    var person = {
        name: 'Hillary',
        age: 19,
        sayIntroduce: function () {
            return "Hello, My name is " + this.name + " and I'm " + this.age + ' years old.'
        },
        sayHobby: function (val1, val2) {
            return "I'm " + this.name + ", I like " + val1 + " and " + val2 + ".";
        }
    }
    var person1 = {
        name: 'Coy'
    }
    console.log(person.sayIntroduce()); // Hello, My name is Hillary and I'm 19 years old.

    当我们通过 call 和 apply 来this的指向时,不传任何参数,则默认为将this指向修改为 windows

     // 当没有参数时,默认将this指向 window
     console.log(person.sayIntroduce.call()); // Hello, My name is Evan and I'm 20 years old.
     console.log(person.sayIntroduce.apply()); // Hello, My name is Evan and I'm 20 years old.

    有参数时,this 指向第一个参数:

    // 将this指向 person1,由于person1中没有age属性,因此为 undefined
    console.log(person.sayIntroduce.call(person1)); // Hello, My name is Coy and I'm undefined years old.
    console.log(person.sayIntroduce.apply(person1)); // Hello, My name is Coy and I'm undefined years old.

    当需要传递参数时,call可以直接写多个参数,apply需要用数组方式传递:

    console.log(person.sayHobby.call(person1, 'swimming', 'hiking')); // I'm Coy, I like swimming and hiking.
    console.log(person.sayHobby.apply(person1, ['swimming', 'hiking'])); // I'm Coy, I like swimming and hiking.
    

     

    下面是一个构造函数的例子:

    //构造函数应用
    function Grade(max, min, average) {
        this.max = max;
        this.min = min;
        this.average = average;
    }
    
    function Subject(subjectName,max, min, average) {
        Grade.call(this, max, min, average);
        this.subjectName = subjectName;
    }
    var math = new Subject('math', 99, 60, 80);
    console.log(math);

     

    展开全文
  • thisthis 指向看看箭头函数的案例callapply和bind方法的用法以及区别来几个面试题试试 this 指向 1.普通函数的this:指向它的调用者,如果没有调用者则默认指向window. 2.箭头函数的this: 指向箭头函数定义时所处...
  • call apply作用和区别

    千次阅读 2018-05-27 12:26:58
    call和apply两者一直感觉差不多,有点傻傻分不清楚的感觉,今天我们就来细细讨论一下:JavaScript中的每一个Function对象都有一个apply()方法一个call()方法,它们的语法分别为:/*apply()方法*/ function.apply...

    call和apply两者一直感觉差不多,有点傻傻分不清楚的感觉,今天我们就来细细讨论一下:

    JavaScript中的每一个Function对象都有一个apply()方法和一个call()方法,它们的语法分别为:

    /*apply()方法*/
    function.apply(thisObj[, argArray])
    
    /*call()方法*/
    function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

    它们各自的定义:

    apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。

    call:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。

    它们的共同之处:

    都“可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”。

    它们的不同之处:

    apply:最多只能有两个参数——新this对象和一个数组argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError。如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数。

    call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。 

    实际上,apply和call的功能是一样的,只是传入的参数列表形式不同。

    示例代码:

    (1)基本用法

    function add(a,b){
      return a+b;  
    }
    function sub(a,b){
      return a-b;  
    }
    var a1 = add.apply(sub,[4,2]);  //sub调用add的方法
    var a2 = sub.apply(add,[4,2]);
    alert(a1);  //6     
    alert(a2);  //2
    
    /*call的用法*/
    var a1 = add.call(sub,4,2);

    (2)实现继承

    function Animal(name){
      this.name = name;
      this.showName = function(){
            alert(this.name);    
        }    
    }
    
    function Cat(name){
      Animal.apply(this,[name]);    
    }
    
    var cat = new Cat("咕咕");
    cat.showName();
    
    /*call的用法*/
    Animal.call(this,name);

     (3)多重继承

    function Class10(){
      this.showSub = function(a,b){
            alert(a - b);
        }   
    }
    
    function Class11(){
      this.showAdd = function(a,b){
            alert(a + b);
        }  
    }
    
    function Class12(){
      Class10.apply(this);
      Class11.apply(this);   
      // Class10.call(this);
      //Class11.call(this);  
    }
    
    var c2 = new Class12();
    c2.showSub(3,1);    //2
    c2.showAdd(3,1);    //4

     

    apply的一些其他巧妙用法:

    (1)Math.max 可以实现得到数组中最大的一项:

    因为Math.max不支持Math.max([param1,param2])也就是数组,但是它支持Math.max(param1,param2...),所以可以根据数apply的特点来解决 var max=Math.max.apply(null,array),这样就轻易的可以得到一个数组中的最大项(apply会将一个数组转换为一个参数接一个参数的方式传递给方法)

    这块在调用的时候第一个参数给了null,这是因为没有对象去调用这个方法,我只需要用这个方法帮我运算,得到返回的结果就行,所以直接传递了一个null过去。

    用这种方法也可以实现得到数组中的最小项:Math.min.apply(null,array)

    (2)Array.prototype.push可以实现两个数组的合并

    同样push方法没有提供push一个数组,但是它提供了push(param1,param2...paramN),同样也可以用apply来转换一下这个数组,即:

    var arr1=new Array("1","2","3");
    var arr2=new Array("4","5","6");
    Array.prototype.push.apply(arr1,arr2);    //得到合并后数组的长度,因为push就是返回一个数组的长度

    也可以这样理解,arr1调用了push方法,参数是通过apply将数组转换为参数列表的集合

    通常在什么情况下,可以使用apply类似Math.max等之类的特殊用法:

    一般在目标函数只需要n个参数列表,而不接收一个数组的形式,可以通过apply的方式巧妙地解决这个问题。



    转自:https://www.cnblogs.com/lengyuehuahun/p/5643625.html

    展开全文
  • JavaScript中通过call或者apply用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由 thisObj 指定的新对象
  • 作用:都是用来改变this指向; 区别:接收参数的方式不同; call()接收的参数是逐个列举出来的; apply()接收的是参数数组。 性能对比: call性能比apply好那么一些(尤其是传递给函数的参数超过3个的时候),...

    【 学习探索过程中记下的点点笔记,以供分享,欢迎大家一起学习探讨~如有雷同可附链接,谦虚学习!】

    • 作用:都是用来改变this指向;

    • 区别:接收参数的方式不同;

    call()接收的参数是逐个列举出来的;
    apply()接收的是参数数组。

    • 性能对比:
      call性能比apply好那么一些(尤其是传递给函数的参数超过3个的时候),所以开发时可以用call好一点。
    展开全文
  • callapply和bind的区别

    千次阅读 2019-05-30 00:40:10
    callapply和bind都是用于改变方法中this指向的。 var x = "window_x"; var obj = { x : "obj_x", fn : function(y){ console.log(this.x + " ; " + y); } } obj.fn(1); //obj_x ; 1 var fn = obj.fn; fn(1);.....

    call、apply和bind都是用于改变方法中this指向的。

    var x = "window_x";
    var obj = {
        x : "obj_x",
        fn : function(y){
            console.log(this.x + " ; " + y);
        }
    }
    obj.fn(1);  //obj_x ; 1
    var fn = obj.fn;
    fn(1);  //window_x ; 1
    fn.call(obj,1);  //obj_x ; 1
    fn.apply(obj,[1]);  //obj_x ; 1
    fn.bind(obj,1);  //返回fn方法:f (y){console.log(this.x + " ; " + y);}
    var bfn = fn.bind(obj);
    bfn(1); //obj_x ; 1
    

    执行结果:
    在这里插入图片描述
    call调用 将方法中的this指向call中第一个参数,当第一个参数为null、undefined时,默认指向window; call中第一个参数之后是要传递给方法的参数列表。

    apply与call相似,不同之处在于传递给方法的参数形式不一致。apply传递给方法的参数是数组的形式。

    call和apply在改变方法的this指向时,会同时执行方法;而bind不会执行方法,而是返回改变this指向后的新方法。

    展开全文
  • call(对象,param1,param2,…)和apply(对象,[param1,param2,…])的共同点:都是用来改变函数体内this的指向,函数的第一个参数代表函数体内的this的指向 如果参数为空或者为null,则this对象的作用域是全局作用域...
  • 目录 1.用法示例 2.相同点 3.不同点 用法示例: //首先来看三个方法的基本语法: // ??...apply的使用语法 // 函数名字.apply(对象,[参数1,参数2,...]);...call的使用语法 ...//作用:前两个都是为了改变th...
  • call/apply 作用类似,都可以改变指针执行函数,区别在于传参不同,call 需要单个传参,apply 通过数组传参 function.call(thisArg, arg1, arg2, ...) function.apply(thisArg, [arg1, arg2, ...]) .
  • this是javascript的一个关键字,随着函数使用场合不同,this的值会发生...但是总有一个原则,那就是this指的是调用函数的那个对象,通过本文给大家介绍JS中改变this指向的方法(call和apply、bind),需要的朋友参考下
  • call()和apply() 介绍 这两个方法都是函数对象的方法,需要通过函数对象来调用。 当函数调用call()和apply()时,函数都会立即执行。 都可以用来改变函数的this对象的指向。 第一个参数都是this要指向的...
  • call()、apply()的区别: 相同点: 1.call()和apply()都可以用来间接调用函数,...call()和apply()的基本区别:在于将参数传递给函数。 call():使用其自有的实参列表作为函数的参数; apply():要求以数组的形式...
  • apply和call功能一样,只是传入的参数列表形式不同,本文给大家介绍apply和call方法定义及apply和call方法的区别,感兴趣的朋友一起学习吧
  • 深入理解bind()和call/apply()方法的区别
  • call()方法--改变this指向 function foo(){ setTimeout(()=>{ console.log('id:',this.id) },100) } var id=21 foo.call({id:42}) //打印结果id:42 window.color="red"; document.color='yellow'; ...
  • 一、call和apply的说明 1、callapply都属于Function.prototype的一个方法,它是JavaScript引擎内在实现的,因为属于Function.prototype,所以每个Function对象实例(就是每个方法)都有callapply属性。既然作为...
  • 本文主要介绍了JavaScript中的call和apply的用途以及区别。具有很好的参考价值,下面跟着小编一起来看下吧
  • callapply区别和用法

    千次阅读 2017-12-05 09:39:25
    call和apply作用都是把obj绑定到thisObj的作用,即改变this的指向,然而唯一的区别就是apply传递的参数必须得是数组的形式传递,而call则直接连续参数传递call和apply在什么地方可以用到呢?当一个对象需
  • 本文实例讲述了js中apply()和call()的区别与用法。分享给大家供大家参考,具体如下: 每个函数都包括两个非继承而来的方法:apply()和call()。两者用途都是在特定的作用域中调用函数,等于重新设置了函数体内this...
  • JS中call和apply区别有哪些

    千次阅读 2014-05-06 12:46:27
    一、call和apply区别   传递参数的方式。用法上不同,主要是参数不完全同   2、具体说明 (1)、B.Function.call(A,arg,arg) 这个例子是讲A对象“调用”B对象的Function(某个具体的方法)。 注意call方法中...
  • js中call和apply区别

    2019-01-21 11:27:46
    call([thisObj[,arg1[, arg2[,[,.argN]]]]]) /*call()方法*/ apply([thisObj[,argArray]]) /*apply()方法*/ 各自的定义: apply:调用一个对象的一个方法,用另一个对象替换当前对象。例如:B.apply(A, argsArray)...
  • call和apply都是function原型上的方法,而每一个函数作为function这个类上的实例可以调取原型上的call和apply,都是用来改变函数中this指向的, 区别call:传参是一个一个传给函数 apply:把所有要传的参数以数组...
  • callapply、bind三者的用法和区别

    万次阅读 多人点赞 2018-09-21 00:18:07
    callapply、bind都是改变this指向的方法 fn.call 当前实例(函数fn)通过原型链的查找机制,找到function.prototype上的call方法,function call(){[native code]} fn.call() 把找到的call方法...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 147,619
精华内容 59,047
关键字:

call和apply的区别和作用