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


      


  • 相关阅读:
    关于postman使用上发现的一点问题
    关于异步的处理方法
    关于console.log() 打印得引用类型得数据得相关问题
    使用electron将单页面vue webapp 打包成 PC端应用
    当后台只接受字符串得时候,在传输复杂得数据得时候会发生得问题
    默认事件
    事件冒泡
    offsetWidth clientWidth scrollWidth 三者之间的区别和联系
    事件获取目标 currentTarget target srcElement三者之间的区别和联系
    不支持模块化规范的插件可以使用import 导入的原因
  • 原文地址:https://www.cnblogs.com/hai233/p/6068908.html
Copyright © 2011-2022 走看看