为什么说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所有的表面上的函数都是通过一个原初的构造函数 构造的,而这个原初构造函数 是由原初对象构造的
所以一切的指向最后都指向了 原初对象 ,当然这里的原初对象只是我自己命的名。

你可能感兴趣的:(js'随笔)