js中對象與函數的關系


首先什么是對象?根據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原型。


免責聲明!

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



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