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;
      

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM