zoukankan      html  css  js  c++  java
  • js中call,caller,callee,aplly

    1.函数的caller属性

    (1)、区分函数是在函数体调用还是顶层代码中调用:顶层中调用函数,该函数的caller属性返回null,在函数中调用,会返回调用发i函数的函数;

    <script>
    function testFun(){
        if(testFun.caller === null){
            document.write('在顶层中调用');
        }else{
              document.write('在h函数中调用');   
             document.write('在' + testFun.caller.name + '中调用');
        }    
    }
    
    /*直接调用*/、
     testFun();
    /*函数中调用*/
    funtion test(){
         testFun();
    }
    </script>

    2.Arguments的callee属性

    (1)、使用Arguments的callee属性来匿名递归调用函数

    <script>
    function outNum(x,y){
        document.write(x + <br>);
        if(x < y){
             x ++;
             return arguments.callee(x,y);
        }    
       else if(x > y){
             y --;
             return arguments.callee(x,y);
        }  
        else{
            return
        }
    }
    
    /*调用*/、
     outNum(9,4)
    </script>

    3.函数的apply()方法和call()方法

    (1)、语法:funName.call(this[,arg1[,arg2....]]);

    funName.apply(this,[arg1,arg2....]);apply方法后面的参数以数组的额形势传递

    <script>
    function range(_price){
       if(typeof(_price) != 'number'){
            this._price = 1000; 
        }else{
           if(_price >1000){
               this._price = 1000; 
          }else{
              this._price = _price; 
          }
       }
    }
    /*aplly写法*/
    function Monitor(_price, _name)){
       this.name = _name;
       range.aplly(this,arguments);
    }
    /*call写法
    function Monitor(_price, _name)){
       this.name = _name;
       range.call(this,_price);
    }
    */
    Monitor.prototype = new range(); var Monitor1 = new Monitor('c1',800); document.write(monitor1.name,monitor.price); </script>

      

  • 相关阅读:
    搭建论坛
    修改ecshop页面
    通信失败的原因
    UCenter教程
    discuz论坛 手机登录
    discuz论坛 安装短信插件
    eccshop获取商品详情属性的字段调用值
    php与discuz形成的对接
    php
    php论坛
  • 原文地址:https://www.cnblogs.com/detanx/p/jscall.html
Copyright © 2011-2022 走看看