• 创建类的方式


    背景:

      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高级程序设计第六章(第三版)

  • 相关阅读:
    [Learn AF3]第二章 App Framework 3.0的组件View——AF3的驱动引擎
    [Learn AF3]第一章 如何使用App Framework 3.0 构造应用程序
    [译]Intel App Framework 3.0的变化
    手机浏览器中屏蔽img的系统右键菜单context menu
    HTML5 touche vents drag to move & AF actionsheet by longTap
    HTML5 FileReader
    【转】Gulp入门基础教程
    【Intel AF 2.1 学习笔记三】
    【Intel AF 2.1 学习笔记二】AF中的页面——Panel
    【Intel AF 2.1 学习笔记一】AF程序结构
  • 原文地址:https://www.cnblogs.com/oulae/p/11173140.html
Copyright © 2020-2023  润新知