您的位置: 翼速应用 > 业内知识 > web前端 > 正文

javaScript的对象原来可以这样做!

    我们可以利用JavaScript的语法特性来创建具有类思想的对象。


    方法一:原始方法--使用new关键字调用构造器创建对象


    代码如下:

javaScript的对象原来可以这样做!.png

    这种方法通过new关键字生成一个对象,然后根据JavaScript是动态语言的特性来添加属性和方法,构造一个对象。其中的this表示调用该方法的对象。


    这种方法的问题在于:如果我们需要多次创建对象,那么就需要重复代码多次,不利于代码的复用。


    方法二:工厂方法


    代码如下:

javaScript的对象原来可以这样做!.png

    这种方法虽然也实现了创建对象,但是同样地,如果需要多次创建对象,而且属性内容不一样的话,也是需要重复代码多遍。需要重新考虑代码重用率,接下来修改代码,使其可以提高代码重复率,而且可以改变工厂方法,传入参数赋值。


    改进代码如下:

javaScript的对象原来可以这样做!.png

    这种方法虽然可以提高代码的重用率,但和面向对象中类的概念相比,有一个很大的缺陷。面向对象强调对象的属性私有,但对象的方法是共享。而上面的工厂方法在创建对象时,要为每个对象创建各自私有的方法。同时,由于为每个对象都创建逻辑相同的方法,所以很浪费内存。


    改进代码如下:

javaScript的对象原来可以这样做!.png

    上面通过定义几个函数对象,解决了不同对象持有函数对象的私有问题。现在所有对象的方法都持有上面两个函数的引用。但是这么一来,对象的函数和对象又相互独立,这和面向对象中特定方法属于特定类的思想不符合。


    方法三:构造函数方法


    代码如下:

javaScript的对象原来可以这样做!.png

    构造函数的方法和工厂方法一样,会为每个对象创建独享的函数对象。当然也可以将这些函数对象定义在构造函数外面,这样有了对象和方法相互独立的问题。


    使用构造函数存在的最大问题就是每个实例都会将所有的属性创建一次。这个对于数值属性来说可以接受,但是如果函数方法每个实例都要创建一遍,则不合理。


    要创建Person()的新实例,必须使用new操作符。以这种方式调用构造函数实际上会经历以下四个步骤:


    创建一个新对象;

    将构造函数的作用域赋给新对象(因此this就指向了这个新对象);

    执行构造函数中的代码(为这个新对象添加属性);

    返回新对象。

    方法四:原型方法


    代码如下:

javaScript的对象原来可以这样做!.png

    当生成Person对象时,prototype的属性都赋给了新的对象。那么属性和方法是共享的。首先,该方法的问题是构造函数不能传递参数,每个新生成的对象都有默认值。其次,方法共享没有任何问题,但是,当属性是可改变状态的对象时,属性共享就有问题。


    修改代码如下:

javaScript的对象原来可以这样做!.png

    上面的代码通过obj1的属性array添加元素时,obj2的array属性的元素也跟着受到影响,原因就在于obj1和obj2对象的array属性引用的是同一个Array对象,那么改变这个Array对象,另一引用该Array对象的属性自然也会受到影响,混合的构造函数/原型方式使用构造函数定义对象的属性,使用原型方法定义对象的方法,这样就可以做到属性私有,而方法共享。


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


    代码如下:

javaScript的对象原来可以这样做!.png

    属性私有后,改变各自的属性不会影响别的对象。同时,方法也是由各个对象共享的。在语义上,这符合了面向对象编程的要求。


    方法六:动态原型方法


    代码如下:

javaScript的对象原来可以这样做!.png

    这种方法类似于构造函数/原型方法。只有方法被添加到构造函数中,属性被添加到构造函数人员中,以确保if语句只能成功执行一次。在实际应用中,采用了应用最为广泛的构造函数/原型方法。动态原型法也很流行,它在功能上等同于构造器/原型法。不要单独使用构造函数和原型方法。

我来说两句

0 条评论

推荐阅读

  • 响应式布局CSS媒体查询设备像素比介绍

    构建响应式网站布局最常见的是流体网格,灵活调整大小的站点布局技术,确保用户在使用的幕上获得完整的体验。响应式设计如何展示富媒体图像,可以通过以下几种方法。

    admin
  • 提升网站的性能快速加载的实用技巧

    网站速度很重要,快速加载的网站会带来更好的用户体验、更高的转化率、更多的参与度,而且在搜索引擎排名中也扮演重要角色,做SEO,网站硬件是起跑线,如果输在了起跑线,又怎么跟同行竞争。有许多方法可提升网站的性能,有一些技巧可以避免踩坑。

    admin
  • 织梦CMS TAG页找不到标签和实现彩色标签解决方法

    织梦cms是我们常见的网站程序系统的一款,在TAG标签中常常遇到的问题也很多。当我们点击 tags.php 页的某个标签的时候,有时会提示:“系统无此标签,可 能已经移除!” 但是我们检查程序后台,以及前台显示页面。这个标签确实存在,如果解决这个问题那?

    admin
  • HTML关于fieldset标签主要的作用

    在前端开发html页面中常用的标签很多,今天为大家带来的是关于HTML中fieldset标签主要的作用说明,根据技术分析HTML

    admin

精选专题