美文网首页
五、JavaScript定义类和对象

五、JavaScript定义类和对象

作者: Castiel_Z | 来源:发表于2017-12-25 13:50 被阅读0次

    JavaScript中创建对象的方式有以下这些:

    一、 原始的方式

    原始方式

    若要创建多个实例呢?

    二、工厂方式

    工厂方式

    为函数传递参数

    工厂方式 --》传值

    问题:每次调用函数 createUser(),都要创建新函数 goHome(),意味着每个对象都有自己的 goHome() 版本。而事实上,每个对象都共享同一个函数

    从功能上讲,工厂方式解决了重复创建函数对象的问题,但是从语义上讲,该函数不太像是对象的方法。

    三、构造函数

    构造函数方式

    与工厂方式的差别:首先在构造函数内没有创建对象,而是使用 this 关键字。使用 new 运算符构造函数时,在执行第一行代码前先创建一个对象,只有用 this 才能访问该对象。然后可以直接赋予 this 属性,默认情况下是构造函数的返回值(不必明确使用 return 运算符)

    构造函数方式,看起来更像一般对象的创建方式了,但是就像工厂函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。

    四、原型方式

    利用对象的 prototype 属性,把它看成创建新对象所依赖的原型

    原型方式无构造函数,不能通过给构造函数传递参数来初始化属性的值,且属性指向的是对象,而不是函数,会导致创建对个对象时,属性值出现共享。doctor1中修改了patients属性,而doctor2的patients属性也同样发生了修改 。

    五、混合的构造函数/原型方式

    联合使用构造函数和原型方式:即用构造函数定义对象的所有非函数属性,用原型方式定义对象的函数属性(方法)

    六、动态原型方法

    七、混合工厂方式

    ps:实际与工厂方式没什么区别,只是使用new 让看起来像真正的构造函数。

    采用哪种方式

    如前所述,目前使用最广泛的是混合的构造函数/原型方式。此外,动态原始方法也很流行,在功能上与构造函数/原型方式等价。可以采用这两种方式中的任何一种。不过不要单独使用经典的构造函数或原型方式,因为这样会给代码引入问题。

    参考:ECMASCript 定义类和对象

    相关文章

      网友评论

          本文标题:五、JavaScript定义类和对象

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