function Person (){}; var p = new Person();
{} 對象原型鏈結構圖
數組
[] 數組原型鏈結構圖
瀏覽器
Object.prototype
對應的構造函數
app
div -> DivTag.prototype( 就是 o ) -> Object.prototype -> nulldom
var o = { appendTo: function ( dom ) { } }; function DivTag() {} DivTag.prototype = o; var div = new DivTag();
在 js 中 使用 Function 能夠實例化函數對象. 也就是說在 js 中函數與普通對象同樣, 也是一個對象類型( 很是特殊 )函數
new Function( arg0, arg1, arg2, ..., argN, body );
// 傳統的 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();
var func = new Function( 'num1', 'num2', 'console.log( num1 + num2 );' );
練習: 利用 Function 建立一個函數, 要求容許函數調用時傳入任意個數參數, 而且函數返回這些數字中最大的數字.
練習: 利用 Function 建立一個求三個數中最大數的函數.prototype
// 傳統 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;' )
解決代碼太長的辦法:設計
var func = new Function( 'a', 'b', 'c', 'var res = a > b ? a : b;' + 'res = res > c ? res : c;' + 'return res;' );
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 );' );
arguments 是一個僞數組對象. 它表示在函數調用的過程當中傳入的全部參數的集合.
在函數調用過程當中沒有規定參數的個數與類型, 所以函數調用就具備靈活的特性, 那麼爲了方便使用,
在 每個函數調用的過程當中, 函數代碼體內有一個默認的對象 arguments, 它存儲着實際傳入的全部參數.3d
js 中函數並無規定必須如何傳參code
在代碼設計中, 若是須要函數帶有任意個參數的時候, 通常就不帶任何參數, 全部的 參數利用 arguments 來獲取.
通常的函數定義語法, 能夠寫成:對象
function foo ( /* ... */ ) { }
function foo ( ) { // 全部的參數都在 arguments 中. 將其當作數組使用 // 問題而已轉換成在有一個數組中求最大值 var args = arguments; var max = args[ 0 ]; for ( var i = 1; i < args.length; i++ ) { if ( max < args[ i ] ) { max = args[ i ]; } } return max; }
練習: 利用 Function 寫一個函數, 要求傳入任意個數字 求和
任意的一個函數, 都是至關於 Function 的實例. 相似於 {} 與 new Object() 的關係
function foo () {}; // 告訴解釋器, 有一個對象叫 foo, 它是一個函數 // 至關於 new Function() 獲得一個 函數對象
__proto__
屬性Function.prototype
Fucntion.prototype
繼承自 Object.protoype
array instanceof Array
判斷 構造函數 Array 的原型 是否在 實例對象 array 的原型鏈存在