函數與對象的關系?

之前說過函數也是對象,也是若干屬性的集合,那為什么用tyoeof操作符打印輸出的卻是function,而不是object呢?

函數與對象之間的關系是怎么樣呢?

誠然,按照我們之前的理解,函數是對象的一種是沒有錯的,數組也是對象的一種,但是它跟數組卻有一點不同,數組我們可以理解成是對象的一個子集,或者是一種變形:

var person = {name:"oyakuki",age:20,say:function(){console.log(this.name + "is saying")}};

var arr = ["a","b","c","d"];

我們可以把數組想想成下面的格式:

var arr = [0:"a",1:"b",2:c,3:"d"];

事實上,在es6中有一個foreach語法,我們通過數組的index,就可以訪問到其value。

但是函數跟對象之間的關系卻是很復雜的,不像數組和對象之間的關系比較簡單;

        function Foo(){
            this.name = "oyakuki";
            this.age = 20;
        }

        var fn = new Foo();

        console.log(typeof fn);  //object

上面的代碼中,fn是通過構造函數出來的,并且typeof打印出來的值是object,這說明對象可以通過函數創建出來。

但是我要說的是:對象都是通過函數創建的,可能有人會反駁,因為

var person = {name:"oyakuki",age:20,say:function(){console.log(this.name + "is saying")}};
var arr = ["a","b","c","d"];

但這其實是創建object對象和數組的兩外一種寫法而已,我們稱之為字面量表示法;
另外一種寫法是:

        var person = new Object();
            person.name = "oyakuki";
            person.age = 20;

        var arr = new Array();
            arr[0] = "a";
            arr[1] = "b";
            arr[2] = "c";
            arr[3] = "d";

而Object 和Array 都是函數,所以說:對象都是通過函數創建的
那么函數和對象之間的關系到底是什么呢?
理清他們之間的關系,需要了解另外一個概念prototype原型

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 第5章 引用類型(返回首頁) 本章內容 使用對象 創建并操作數組 理解基本的JavaScript類型 使用基本類型...
    大學一百閱讀 3,270評論 0 4
  • 看完《如果站在其他人的角度,你會帶他們會不一樣么?》的視頻,就深刻的感受到每個人都有自己的過往和立場,我們沒有切身...
    暖白開閱讀 247評論 0 0
  • 看透了,就沒有文學了。我是這么覺得的。以前寫小說,所有的教材和教科書上都是這么說的,要了解人,要了解人。我一直沿著...
    李一十八閱讀 222評論 0 0