zoukankan      html  css  js  c++  java
  • 临时调用call()与apply()方法

    当在某个局域范围内要调用构造函数中或者其他局域范围内的方法

    此时可以用到临时调用方法call与apply

    虽然这两个方法都是起临时调用的功能,但是用法不一样
    
    call(obj,val)
    
    obj:对象名,构造函数用指代this;  val:指代属性值
    
    apply(obj,arr)
    
    obj:对象名,构造函数用指代this;  arr:属性值的数组
    
     
    
    实例一:
    
    function SuperType(name){
      this.name = name;
    }
    
    function SubType(){
      //    SuperType.call(this,"Lucy");    //临时调用构造函数SuperType里面的name属性
      SuperType.apply(this,["Lucy"]);  
      this.age = 19;
    }
    
    var instance = new SubType();
    alert(instance.name);   //Lucy
    
    
    
    //但是有些场合只能用特定的方法,不能互换
    
    实例二:
    
    取数组中最大值:
    
    function isMax(arr){return Math.max.apply(null,arr)}
    
    var nums = isMax([2,3,4,5,6]);
    
    alert(nums);   //6



    //在涉及到临时调用数组Array、对象Object以及调用其他类型方法时

      var a = {"0":"a","1":"b",length:2};

     1.利用字符串连接

      var b = Array.prototype.join.call(a,"+"); //临时调用数组a的方法  a+b

      2.利用函数方法

      var c = Array.prototype.map.call(a,function(key,val){

        return key.toUpperCase();  

      });   //[A,B]

      计算hash数组长度

      function cacuObjLen(obj){

         var len = 0;
         foreach(var property in obj){

            if(Object.prototype.hasOwnProperty.call(obj,property)){  //临时调用对象方法,判断hash数组是否有对应的属性

                len++;

            }

         }

         return len;

      }

      

  • 相关阅读:
    数据库表结构变动发邮件脚本
    .net程序打包部署
    无法登陆GitHub解决方法
    netbeans 打包生成 jar
    第一次值班
    RHEL6 纯命令行文本界面下安装桌面
    C语言中格式化输出,四舍五入类型问题
    I'm up to my ears
    How to boot ubuntu in text mode instead of graphical(X) mode
    the IP routing table under linux@school
  • 原文地址:https://www.cnblogs.com/laoniaofly/p/5946386.html
Copyright © 2011-2022 走看看