01.javascript对象的创建

本文主要总结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)使用原型方式创建对象

原型方式创建对象
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  •   面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的概念,而通过类可以创建任意...
    霜天晓阅读 2,139评论 0 6
  • 第3章 基本概念 3.1 语法 3.2 关键字和保留字 3.3 变量 3.4 数据类型 5种简单数据类型:Unde...
    RickCole阅读 5,161评论 0 21
  • 面向对象(Object-Oriented,OO)的语言有一个标志,那就是它们都有类的慨念,而通过类可以创建任意多个...
    threetowns阅读 885评论 0 4
  • 首先申明,我不是在骂人。等等,你不会又要以为我在说脏话了吧,气。我才没有。 这周自己一个人过的,不得不说,一开始真...
    豆皮妞阅读 267评论 0 0
  • 慈容父爱梦中牵, 忆起仙音泪奔泉。 德厚相传人兴旺, 福荫世代惠无边。 2017.10.19.云杉—伊春
    云杉_2e22阅读 223评论 0 3