1. 程式人生 > >Function建構函式

Function建構函式

在 js 中 使用 Function 可以例項化函式物件. 也就是說在 js 中函式與普通物件一樣, 也是一個物件型別( 非常特殊 )

  1. 函式是物件, 就可以使用物件的動態特性
  2. 函式是物件, 就有建構函式建立函式
  3. 函式是函式, 可以建立其他物件(函式的建構函式也是函式)
  4. 函式是唯一可以限定變數作用域的結構

函式是 Function 的例項

new Function( arg0, arg1, arg2, ..., argN, body );
  1. Function 中的引數全部是字串
  2. 該建構函式的作用是將 引數連結起來組成函式
  • 如果引數只有一個, 那麼表示函式體
  • 如果引數有多個, 那麼最後一個引數表示新函式體, 前面的所有引數表示新函式的引數
  • 如果沒有引數, 表示建立一個空函式

建立一個列印一句話的函式

    // 傳統的
    function foo () {
        console.log( '你好' );
    }
    // Function
    var func = new Function( 'console.log( "你好" );' );
    // 功能上, 這裡 foo 與 func 等價

建立一個空函式

    // 傳統
    function foo () {}
    // Function
    var
func = new Function();

傳入函式內一個數字, 列印該數字

    // 傳統
    function foo ( num ) {
        console.log( num );
    }
    // Function
    var func = new Function ( "num" ,"console.log( num );" );
    func();

利用 Function 建立一個函式, 要求傳入兩個數字, 列印其和

    var func = new Function( 'num1', 'num2', 'console.log( num1 + num2 );'
)
;

練習: 利用 Function 建立一個函式, 要求允許函式呼叫時傳入任意個數引數, 並且函式返回這些數字中最大的數字.
練習: 利用 Function 建立一個求三個數中最大數的函式.

    // 傳統
    function foo ( a, b, c ) {
        var res = a > b ? a : b;
        res = res > c ? res : c;
        return res;
    }
    // Function
    var func = new Function( 'a', 'b', 'c', 'var res = a > b ? a : b;res = res > c ? res : c;return res;' )

解決程式碼太長的辦法:

  1. 利用 加法 連線字串

    var func = new Function( 'a', 'b', 'c',
            'var res = a > b ? a : b;' +
            'res = res > c ? res : c;' +
            'return res;' );
  2. 利用字串特性( 剛學 )

    function foo ( a, b, c ) {
        var res = a > b ? a : b;
        res = res > c ? res : c;
        return res;
    }
    var func = new Function( 'a', 'b', 'c', 'return foo( a, b, c );' );
  3. ES6 的語法( 少瀏覽器實現 )
    • 使用 鍵盤左上角的 左單引號 表示可換行字串的界定符
  4. (最終)利用 DOM 的特性完成該方法