zoukankan      html  css  js  c++  java
  • Javascript高级程序设计——函数内部属性与函数属性

    函数内部属性

      函数内部有两个特殊的属性arguments和this。其中,arguments是类数组对象,包含传入函数中的所有值,这个arguments还有一个属性:callee,这个属性是一个指针,指向拥有arguments的函数。而this据以引用的是函数执行环境对象。

    function fib(n){
        if(n = 1){
            return 1;
        }else{
            return n * arguments.callee(n - 1);   
        }
    }
    
     //这里利用函数内arguments的callees属性降低了函数的耦合、

     

      ECMAScript 5 也规范了另一个函数属性:caller。保存着调用当前的函数的函数的引用,如果是在全局作用域则为null。

    function outer(){
        inner();
    }
    
    function inner(){
        alert(inner.caller);
    }
    
    outer();
    
    //alert函数会制动执行toString函数,这里弹出outer函数代码

       每个函数都有两个非继承而来的方法:apply() 和 call():用途是在特定的作用域中调用函数,等于设置函数体内的this对象的值。

    apply()方法接受两个参数,一个是在其中运行函数的作用域,另一个是参数数组。第二个参数可以是Array()的实例,也可以是arguments对象。
    
    function sum(num1, num2){
        return num1 + num2;
    }
    
    function callSum(num1, num2){
        return sum.apply(this, arguments)
    }
    callSum(1, 2);     //全局作用域中调用所以this为window。
    
    
    call()方法接受两个参数,与apply区别是第二个参数,必须逐个举列出来。
    function callSum(num1, num2){
        return sum.call(this, num1, num2);
    }
    
    callSum(10, 10);


    ECMAScript定义了bind方法,简历函数实例,其this值会被绑定到传给bind()函数的值,例如:

    var obj = {
    this.color: "red"};

    window.color = "green";

    function sayColor(){
    alert(this.color);
    };

    var newFunc = sayColor.bind(obj);
    newFunc(); //red

  • 相关阅读:
    邪恶改装2:用单片机实现一次简单的wifi密码欺骗
    TPYBoard自制微信远程智能温湿度计
    什么是私有网络
    DCHP是什么意思
    ipconfig 命令有什么作用
    什么是网关及网关作用
    什么叫路由
    kvm libvirt 虚拟机管理
    通过python-libvirt管理KVM虚拟机 源码
    通过python-libvirt管理KVM虚拟机 代码实现
  • 原文地址:https://www.cnblogs.com/yangxunwu1992/p/4777082.html
Copyright © 2011-2022 走看看