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