zoukankan      html  css  js  c++  java
  • JS学习之函数内部属性和方法

    知识点:arguments和this对象、caller属性、apply()和call()方法      

      arguments对象:函数内部对象,传入函数中所有参数的集合,类数组对象

               属性:callee 指针,指向拥有这个arguments对象的函数  作用:解耦

      例子:迭代     

        function factorial(num) {
         if(num<=1){
         return 1;
         }else{
         return ( num*arguments.callee(num-1));
         }
        }

        console.log(factorial(4));//24

      
      this对象:函数内部对象,引用的是函数执行的环境对象 在全局作用域执行函数时this为全局对象(window)
        window.color='red';
        var o={color:'blue',};
        
        function sayColor(){alert(this.color);};
        
        sayColor(); //red
    o.sayColor=sayColor;
        0.sayColor();//blue 看this引用的谁
      
      caller属性:指向调用当前函数的函数 保存着调用当前函数的函数的引用
        function a(){
        b(); 
          }

        function b(){
          alert(b.caller)
          }
        
        b();//输出a函数体

      apply()和call(): 作用:修改函数this的指向(修改上下文),拓展函数的作用域,对象与方法解耦 区别:传参 apply(要修改的指向,参数数组/arguments对象)
    call(要求改成的指向,arg1,arg2...)
    例子:哑巴说话
          
          function PersonWei() {
              }
          PersonWei.prototype={
           country:'Wei',
          sayCountry:function () {
          console.log('I am form '+this.country);
                        },
                      }
          var xuShu={
          country:'Shu',
                 }
           var caoCao=new PersonWei();
          caoCao.sayCountry();// I am form Wei
          caoCao.sayCountry.call(xuShu); //I am form Shu


    不知道这样做合不合理,定义了一个表示魏国人的构造函数PersonWei(),它具有属性:country和方法sayCountry(),然后实例了一个caoCao(曹操),我们想要帮xuShu(徐庶)说出自己的国家:    
    caoCao.sayCountry.call(xuShu);让caoCao的this指向变为xuShu(借尸还魂?脑洞大开,应该就是鬼上身,借用你的身体来实现他的行为),这时候this.conutry 中的this指向的就是xuShu对象了,因此结果是  I am form Shu


      


  • 相关阅读:
    * 结束Activity
    进度条ProgressBar
    StackView实现叠加在一起的图片循环移动像循环队列一样
    AdapterViewFlipper功能 自动播放的图片库
    Spinner功能和用法
    SimpleAdapter 网络视图:带预览的图片浏览器
    AutoCompleteTextView
    Faster R-CNN
    Fast R-CNN
    100个大型机器学习数据集汇总(CV/NLP/音频方向)
  • 原文地址:https://www.cnblogs.com/hai233/p/6068908.html
Copyright © 2011-2022 走看看