首先什么是對象?根據W3C上面的解釋JS中所有事物都是對象,對象是擁有屬性和方法的數據,由此可以看出基本值類型不是對象(number、string、Boolean、Undefined),剩下的引用類型(函數、數組、null...)都是對象,也有人說對象是若干屬性的集合。
那么函數和對象是什么關系?
首先我們來測試一下
1、函數是一種對象
function test() {}; console.log(test instanceof Object); // true
很明顯函數是一種對象,但你不能說函數是對象的一種。因為他倆之間是沒有包含關系的。有點像雞蛋和雞的關系。
2、對象都是通過函數創建的
先來看一個例子
function test() { this.name="哈哈" }; var test2=new test(); console.log(test2 instanceof Object); //true
這個例子可以說明對象可以被函數創建。那為什么要說對象都是通過函數創建的,那對象字面量是不是也是通過函數來創建的,答案是肯定的,這是一種語法糖方式。舉個簡單的例子
var obj={ name:"哈哈", age:"18" } var obj=new Object() obj.name="哈哈"; obj.age="18";
上面的對象字面量其實是通過下面的構造函數來創建的。而其中的Object是一種函數:
console.log(typeof Object) //function
通過上面的簡單例子我們可以得出一個結論:對象是通過函數創建的,而函數又是一種對象。那么這是為什么呢?這就牽扯到prototype原型。