01.javascript对象的创建

作者: HLE | 来源:发表于2018-11-02 19:58 被阅读46次

    本文主要总结javascript中的各种对象创建方法

    以及这些方法的特点,优缺点等特性。


    1.通过原生js的Object()构造方法创建对象

    new Object()创建对象

    2.通过字面量的方式创建对象

    字面量创建对象

    注:以上两种方式创建对象都有很大的局限性,如果要创建多个对象,则需要书写很多重复的代码。并且,对于创建统一种类型(具有相同的成员变量和方法)的对象也无能为力


    3.工厂模式:

        1)工厂模式的描述:

            工厂模式就是为了弥补以上两种方式创建对象的不足,将创建具体对象的过程进行了抽象,用函数的形式封装了创建对象的细节。

        2)使用工厂模式创建对象的代码实例:

    工厂模式创建对象

        3)工厂模式的缺点:

        工厂模式虽然解决了上面两种方式创建多个相似对象的缺陷,但是没有解决对象识别的问题。就是说,通过工厂模式创建的对象,没有办法知道它是通过什么构造函数创建的,是属于Person类型,还是Student对象。只能知道它属于Object类型。


    4.构造函数模式

        1)通过构造函数形式创建对象实例:

    构造函数方式创建对象

        注:一般将构造函数的函数名的首字母大写,作为构造函数的表示

        2)调用构造函数经历的四个步骤:

            1.创建一个新对象;

            2.将构造函数的作用域赋给新对象(改变this指向);

            3.执行构造函数中的代码

            4.返回新对象;

        3)constructor的作用:

        通过构造函数创建的对象都有一个constructor属性。这个属性的作用就是指向构造函数,因此,可用于识别对象的类型

        4)优点:

        通过自定义的构造函数创建出来的对象实例的类型就是唯一确认的,这就是构造函数方式强于工厂模式的地方

        5)缺点:

        构造函数的缺点就是:函数中的成员方法在每次创建实例的时候就要再创建一遍

    构造函数的缺陷

        缺陷改进:

        要改进这个缺陷也很容易,因为我们知道在使用构造函数创建对象实例的时候的一大特点就是改变了this指向,所以,我们可以根据这个特性,将构造函数中的成员方法提到构造函数之外,定义为全局的方法,再通过this实现相同的效果。代码如下:

    缺陷改进

        6)仍然存在的问题:

        将成员方法定义在构造函数之外,虽然解决了创建对象时重复创建成员方法,但是当成员方法很多时,那么意味着定义在构造函数外部的全局函数也很多,那么此时,我们定义的构造函数相当于只封装了少量的成员属性,而大部分的成员方法都在外面,所以,降低了构造函数的 封装性。

        所有,引出使用原型创建对象的方法。


    5.原型模式

        1)描述:

        在js中,创建的每个函数都有一个prototype 属性,这个属性是一个指针,它本身也是一个对象,指向的这个构造函数

    图解prototype

        2)使用原型方式创建对象

    原型方式创建对象

    相关文章

      网友评论

        本文标题:01.javascript对象的创建

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