美文网首页
构造器constructor

构造器constructor

作者: bozhao | 来源:发表于2019-04-29 13:59 被阅读0次

    为了方便你理解prototype,我们可以把ECMScript分两大类:函数对象

    什么是函数?什么是对象?
    函数就是带括号()这种,比如 Function()、Object()、Date()、Number()、Boolean()、Array(),
    对象就是不带括号()进行使用的。例如:Function、Object、Date、Number、JSON、Math,
    所以Function既可以当函数又可以当对象
    所以Object只是一段有属性的native function
    所以我们所说的js数据类型如图所示:

    js数据类型
    以上类型除了空和未定义,他们都有两种形态,既可以加上括号当函数来使用,也可去掉括号当对象使用。
    理解即是对象又是函数很重要

    我们先说说Function是怎么回事,Function是一个神奇的代码片段,这个代码片段——Function,是可以当对象来使的,那Function这个对象自身有啥属性了?

    Function.hasOwnProperty('prototype') // true
    Function.hasOwnProperty('name') // true
    Function.hasOwnProperty('length') // true
    //hasOwnProperty(prop)是个啥?是检测对象**自身属性**上有没有prop属性或方法
    // 懂啥意思了吗,我们再来试试
    
    Function.hasOwnProperty('hasOwnProperty')  // false
    // false ? 居然是false 那hasOwnProperty是怎么来的?我们先放一放。
    

    以下开始了,请 注意:
    Function这个神奇的代码是由谁构造出来的?

    Function.constructor === Function // true 是自己
    //constructor是啥?对象的属性?方法?他的内部猜是这样的
    {
          constructor:function(){} // 所以你说constructor是啥 ,算了就叫属性吧
    }
    

    上面代码块的意思,有一个对象,对象里面有一个 constructor属性, constructor属性的值是个function,而这个function就是构造器=>构造函数
    直接说吧,constructor这个东西,他的意思就是对象是由谁?构造出来的。此时的Function是当作对象来使用的,我们自己写的函数,也会有一个constuctor,他也是Function这段函数构造出来的,我们自己写的对象,也有一个constuctor,他是Object这段函数代码构造出来的

    console.log(Function.constructor)  // function(){}  
    

    没错Function对象的constructor是一个函数,而这个函数就是Function,他是一串神奇的代码,这个神奇的代码,他只是单纯的一段代码,一段神奇代码。

    constructor也和hasOwnProperty一样都不是Function对象自身的属性

    知道了Function对象是谁构造出来的,那Object是由谁构造出来的?

    Object.constructor === Function // Function()函数构造器=>构造函数,是一串native代码
    
    Number.constructor === Function // Function() //如你所想
    // Object、Function 等他们的构造器就是那段神奇的代码,那段神奇的代码创造了他们
    

    注意哈,到目前为止我们还没有疏理prototype的概念。
    我们先画一张构造图

    构造图

    以上至少说明。

    1 Function是一串native代码,注意这段代码也是有属性的哈

    2 Function这段有属性的函数代码构造出了Object这段同样带有属性的函数代码,也构造出了String这段既可以当对象使用的也可以当函数片段使用的代码

    3 JSON、Math也是由Object这段代码构造的。但是JSON不是一个方法,他是纯纯纯对象

    4 Object构造出来的东西只能是对象,而Function构造出来的既能是对象也能是函数

    5 underfund,null之外你能看到的绝大部分东西要么是Function直接构造出来的要么是Object构造出来的

    6 Object又是Function构造出来的。但是最重要你自己写的new 一个func 这样构造出来的是一个纯对象,他虽然是一个普通funcion函数构造出来的,但不是直接由Function构造出来的,所以只是纯对象

    本文说了这么多,只要了解了纯对象形态和 即是函数又是对象形态就好了

    相关文章

      网友评论

          本文标题:构造器constructor

          本文链接:https://www.haomeiwen.com/subject/kzjynqtx.html