• 函数深入理解---函数的属性length和方法call 和apply


    函数同样有两个非常好用的属性:length 和prototype
    
    function fn1(){
    
    }
    
    function fn2(num1,num2){
    
    }
    
    function fn3(num1){
    
    }
    
    //函数的length就表示该函数所期望的参数值
    alert(fn1.length) // 0
    alert(fn2.length) // 2
    alert(fn3.length) // 1
    
    
    call 和apply方法查可以通过函数名称来调用函数
    
    对于apply而言
    有两个参数,第一个是调用的上下文,第二个是参数数组,可以直接把
    arguments传递进去
    
    对于call而言
    第一个参数是上下文对象,后面的参数是不同函数参数
    
    function sum(num1,num2){
        return num1 + num2;
    }
    
    function callSum1(num1,num2){
        //使用sum 这个函数来完成一次调用,调用的参数就是callSum1这个函数的参数
        //apply的第二个参数表示一组参数的数组
        return sum,apply(this,arguments)
    }
    
    
    function callSum2(num1,num2){
        // 关键就是第二个参数是数组
        return sum.apply(this,[num1,num2]);
    }
    
    alert(callSum1(12,22));
    alert(callSum2(22,32));
    
    
    function callSum3(num1,num2){
        //call是通过参数列表来完成传递,其它和apply没有任何区别
        return sum.call(this,num1,num2);
    }
    
    alert(callSum3(12,22));
    
    
    /*
        当需要创建一个类的时候,设置类的属性和方法需要通过this关键字来引用
        但是特别注意:this关键字在调用时会根据不同的调用对象变得不同
    */
    
    var color = 'red';
    
    function showcolor(){
        alert(this.color);
    }
    
    //创建了一个类,有一个color的属性和一个show的方法
    
    function circle(color){
        this.color = color;
    }
    
    var c= new Circle('yellow');
    
    showColor.call(this) //使用上下文来调用showColor,结果是red
    showColor.call(c); //上下文对象是以,结果就是yellow
    
    /*
        通过以上发现,使用call和apply之后,对象中可以不需要定义方法了
        这就是call和apply的一种运用
    */
  • 相关阅读:
    android中ping命令的实现
    回溯法——求解0-1背包问题
    scanner使用中遇见的问题
    Eddy's digital Roots
    项目经理注意事项(3)---宏观把控
    Spring IOC容器
    C++对象模型——Template中的名称决议方式 (第七章)
    比赛对手名单
    猴子吃桃问题
    设计模式-单例模式(02)
  • 原文地址:https://www.cnblogs.com/leole/p/4164871.html
Copyright © 2020-2023  润新知