zoukankan      html  css  js  c++  java
  • 创建类的方式

    背景:

      ES6之前,也就是没有class关键字之前,JS一直使用的是函数和原型链结合的方式来创造类,下面就对于一些基本的方式来进行一个整合。

    具体方式:

      1. 工厂模式:

     1 function Person(name, age, job) {
     2     var o = new Object()
     3     o.name = name
     4     o.age = age
     5     o.job = job
     6     o.sayName = function () {
     7         alert(this.name)
     8     }
     9     return o
    10 }
    11 var person1 = Person()
    12 var person2 = Person()

      缺点:

        ①. 类的共同属性没有被明显区分;例如上面的person1对象和person2对象的sayName方法根本上不是用一个方法;

        ②. 如果使用这种方法创造大量的对象,那么会导致占用大量的内存空间。(因为每一个对象的sayName都占有内存空间)

     

      2. 构造函数模式

     1 function Person(name, age, job) {
     2     this.name = name
     3     this.age = age
     4     this.job = job
     5     this.sayName = function () {
     6         alert(this.name)
     7     }
     8 }
     9 var person1 = new Person()
    10 var person2 = new Person()

      缺点:(和工厂模式一致)

        ①. 类的共同属性没有被明显区分;例如上面的person1对象和person2对象的sayName方法根本上不是用一个方法;

        ②. 如果使用这种方法创造大量的对象,那么会导致占用大量的内存空间。(因为每一个对象的sayName都占有内存空间)

      3. 原型模式

     1 function Person(name, age, job) {
     2     this.name = name
     3     this.age = age
     4     this.job = job
     5 }
     6 Person.prototype = {
     7     constructor: Person,
     8     sayName: function () {
     9         alert("this.name")
    10     }
    11 }
    12 var person1 = new Person()
    13 var person2 = new Person()

      特性:

        解决了工厂模式和构造函数模式的问题。

      缺点:

        ①. 原型的公共属性是可以被任意一个原型对象修改的

      4. 动态原型模式:该模式个人还不知道其应用场景

     1 function Person(name, age, job) {
     2     this.name = name
     3     this.age = age
     4     this.job = job
     5     if (typeof this.sayName != "function") {
     6         Person.prototype.sayName = {
     7             alert("this.name")
     8         }
     9     }
    10 }
    11 var person1 = new Person()
    12 var person2 = new Person()

      5. 稳妥构造函数模式

     1 function Person(name, age, job) {
     2     var o = new Object()
     3     pname = name
     4     page = age
     5     pjob = job
     6     o.sayName = function () {
     7            alert(this.name)
     8     }
     9     return o
    10  }
    11 var person1 = Person()
    12 var person2 = Person()

      特性:

        ①. 这种模式提供了一种创造私有变量的方法,在外层,除了对象暴露的函数,其他方式不能访问变量

      缺点:

        ①. 类的共同属性没有被明显区分;例如上面的person1对象和person2对象的sayName方法根本上不是用一个方法;

        ②. 如果使用这种方法创造大量的对象,那么会导致占用大量的内存空间。(因为每一个对象的sayName都占有内存空间)

    参考资料:

      1. JavaScript高级程序设计第六章(第三版)

  • 相关阅读:
    无须任何软件配置iis+ftp服务器图文说明
    适合wordpress中文网站的seo优化插件 DX-Seo
    wordpress自动批量定时发布插件 DX-auto-publish
    wordpress自动保存远程图片插件 DX-auto-save-images
    wordpress图片水印插件DX-Watermark
    WordPress添加固定位置的百度分享按钮
    Ecshop 最小起订量如何设置
    WP主题制作常用标签代码
    ecshop登陆后价格可见,会员注册登陆才能显示价格
    ECshop设置301最快捷最简单的方法
  • 原文地址:https://www.cnblogs.com/oulae/p/11173140.html
Copyright © 2011-2022 走看看