zoukankan      html  css  js  c++  java
  • js中的apply与call的用法与区别

    call 和 apply 都是为了改变某个函数运行时的 context 即上下文而存在的,换句话说,就是为了改变函数体内部 this 的指向
    call 和 apply二者的作用完全一样,只是接受参数的方式不太一样。

    方法定义
    apply
    Function.apply(obj,args)方法能接收两个参数:

    obj:这个对象将代替Function类里this对象

    args:这个是数组或类数组,apply方法把这个集合中的元素作为参数传递给被调用的函数

    call

    call方法apply方法的第一个参数是一样的,只不过第二个参数是一个参数列表

    在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window

    //在非严格模式下当我们第一个参数传递为null或undefined时,函数体内的this会指向默认的宿主对象,在浏览器中则是window
    var test = function(){
      console.log(this===window);
    }
    test.apply(null);//true
    test.call(undefined);//true
     

    用法

    1."劫持"别人的方法(个人感觉也是继承)

    //此时foo中的logName方法将被bar引用 ,this指向了bar
    var foo = {
      name:"mingming",
      logName:function(){
        console.log(this.name);
      }
    }
    var bar={
      name:"xiaowang"
    };
    foo.logName.call(bar);//xiaowang

    2.实现继承

    function Animal(name){   
      this.name = name;   
      this.showName = function(){   
        console.log(this.name);   
      }   
    }   
     
    function Cat(name){  
      Animal.call(this, name);  
    }   
     
    var cat = new Cat("Black Cat");   
    cat.showName(); //Black Cat
  • 相关阅读:
    Node
    HTTP权威指南
    一些乱七八糟的思考积累
    有限状态机
    奇怪问题引用到其它文件夹项目文件方法
    dijkstra+堆优化
    高精度
    BUAA 1301 最短路
    阿里云服务器ECS(Centos8)下安装和配置python3.8
    Cheat Sheet
  • 原文地址:https://www.cnblogs.com/aixue/p/8066262.html
Copyright © 2011-2022 走看看