JS函数的属性

1.arguments.callee

        //经典的阶乘(递归)函数

        function factorial(num) {

            if (num <= 1) {

                return 1;

            } else {

                return num * factorial(num - 1);

            }

        }

        //消除函数名的耦合现象

        function factorial(num) {

            if (num <= 1) {

                return 1;

            } else {

                return num * arguments.callee(num - 1);//函数内部属性 [callee]

            }

        }

        var trueFactorial = factorial;

        factorial = function () {

            return 0;

        };

        alert(trueFactorial(5));//120  使用callee属性 接触函数名耦合状态 可以继续使用递归 否则返回0

        alert(factorial(5));    //0

2.Length:表示函数希望接收的命名参数的个数

3.prototype:在创建自定义引用类型以及实现继承时,该属性的作用极为重要,该属性不可枚举,因此使用for-in 无法发现

方法:

1.apply()和call()

  用途:在特定的作用域中调用函数,等于设置函数体内this对象的值

        function sum(num1, num2) {

            return num1 + num2;

        }

        function callSum(num1, num2) {

            return sum.call(this, num1, num2);//明确传入每一个参数

        }

        function callSum1(num1, num2) {

            return sum.apply(this, arguments);//传入arguments对象

        }

        function callSum2(num1, num2) {

            return sum.apply(this, [num1, num2]);//传入数组

        }



        alert(callSum1(10, 10));//20

        alert(callSum2(10, 10));//20

2.bind():创建一个函数的实例,其this的值会被绑定到传给bind()函数的值

      window.color = "red";

        var o = { color: "blue" };

        function sayColor() {

            alert(this.color);

        }

        var objectSayColor=sayColor.bind(o);

        objectSayColor();//blue;

      

  

你可能感兴趣的:(js)