爲什麼說JavaScript中的函數是其實是對象

//2020 4.24更新
更正: Date 的實例的__proto__指向的是Date函數
對於整個關於類的結構深入分析在 https://blog.csdn.net/singlever/article/details/105113968

//2020.3.9 更新
擴展
所有的變量類型都是由其變量的構造函數所構成

let s = 1;
s.constructor === Number //true

s = '1'

s.constructor === String //true

s = []

s.constructor === Array //true

s = {}

s.constructor === Object //true
String //ƒ String() { [native code] }

Number //ƒ Number() { [native code] }

Object //ƒ Object() { [native code] }

Array //ƒ Array() { [native code] }

——————————————————————————————————————————————————————————————————————————————————————————————
//原文
JavaScript有一句話 萬物皆爲對象

不然就是對象中的屬性

1.Protoype的講解
prototype屬性只有function函數擁有,對象是沒有這個屬性的,雖然function也是一種對象,但是是一種特殊的對象
用一個大佬的一句話對prototype的描述 這個屬性是一個指針,指向一個對象,這個對象的用途就是 “包含所有實例” 共享的屬性和方法(我們把這個對象叫做原型對象)。
原型對象也有一個屬性,叫做constructor,這個屬性包含了一個指針,指回原構造函數。


2020.3.26更新 對prototype 的補充 https://blog.csdn.net/singlever/article/details/105113968

2.proto
對象具有屬性proto,通過__proto__可以,指向到構造當前對象的原型

        1. var c = {}
        
           c.__proto__         //原初對象




        2. var k = function(){}

           k.__proto__         //原初構造函數function    ƒ () { [native code] }
        
           k.__proto__.__proto__  //原初對象




        3. var c = new Date()

           c.__proto__         //Date對象
           c.__proto__.__proto__            //原初對象



        4.  var ksk = function(k){ this.k = k }
           
            ksk.__proto__     //原初構造函數function
            ksk.__proto__.__proto__            //原初對象




        5.  class qu extends Data{}
           
            qu.__proto__       //Date函數

            qu.__proto__.__proto__       //原初構造函數function
            qu.__proto__.__proto__.__proto__            //原初對象

爲什麼說函數是對象,相信大家不難看出了,JavaScript所有的表面上的函數都是通過一個原初的構造函數 構造的,而這個原初構造函數 是由原初對象構造的
所以一切的指向最後都指向了 原初對象 ,當然這裏的原初對象只是我自己命的名。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章