美文网首页
Function类型

Function类型

作者: 蜗牛的进阶之路 | 来源:发表于2016-08-23 11:26 被阅读0次

    一、概念

    Function(函数)类型实际上是对象。每个函数都是 Function 类型的 实例,而且都与其他引用类型一样具有属性和方法。由于函数是对象,因此函数名实际上也 是一个指向函数对象的指针


    二、作为值的函数

    ECMAScript 中的函数名本身就是变量,所以函数也可以作为值来使用。也就是说,不 仅可以像传递参数一样把一个函数传递给另一个函数,而且可以将一个函数作为另一个函数 的结果返回。

    function box(sumFunction, num){
         return sumFunction(num);
    }
    function sum(num) {
         returnnum+10;
    }
    varresult=box(sum,10);
    

    三、函数内部属性

    • arguments
    function box(num){
       if(num<=1){
             return 1; 
          }
      else{
             return  num*arguments.callee(num-1);//使用 callee 来执行自身 等同于returnnum*box(num-1);
         }
     }
    
    • this
    window.color='红色的'; //全局的 或者写成var color = '红色的'
    alert(this.color); //打印全局的 color
    
    var box={
       color:'蓝色的', //局部的 color 
       sayColor :function(){ 
               alert(this.color); //此时的 this 只能 box 里的 color 
                           } 
            };
    
    box.sayColor(); //打印局部的 color 
    alert(this.color); //还是全局的
    

    四、函数属性和方法

    • length 属性表示函数希望接收的命名参数的个数
      functionbox(name,age){
             alert(name+age); 
       }
       alert(box.length);
    
    • prototype 属性 (原型)
      为一个特定类声明通用的变量或者函数。

      function Test(){
      
      }
      alert(Test.prototype); // 输出 "Object"
      
    • 用prototype给对象 添加属性

     function Fish(name, color){
      this.name=name;
      this.color=color;
     }
    Fish.prototype.livesIn="water";
    Fish.prototype.price=20;
    
    • 用prototype给对象添加函数
        function Employee(name, salary)
        {
          this.name=name;               
          this.salary=salary;
        }
    
       Employee.prototype.getSalary=function getSalaryFunction()
        {
         return this.salary;
        }
        Employee.prototype.addSalary=function addSalaryFunction(addition)
        {
         this.salary=this.salary+addition;
        }
    
    • 每个函数都 包含这两个非继承而来的方法。apply()和 call()

    var color='红色的'; //或者 window.color='红色的';
    var box={
    color:'蓝色的'
    };
    function sayColor(){
    alert(this.color);
    }
    sayColor(); //作用域在 window
    sayColor.call(this); //作用域在 window
    sayColor.call(window); //作用域在 window
    sayColor.call(box); //作用域在 box,对象冒充

    注:
    

    使用 call()或者 apply()来扩充作用域的最大好处,
    就是对象不需要与方法发生任何耦合 关系(耦合,
    就是互相关联的意思,
    扩展和维护会发生连锁反应)。
    也就是说,
    box 对象和 sayColor()方法之间不会有多余的关联操作,
    比如 box.sayColor=sayColor;

    
    
    

    相关文章

      网友评论

          本文标题:Function类型

          本文链接:https://www.haomeiwen.com/subject/pawgsttx.html