美文网首页
对象的几种创建方式

对象的几种创建方式

作者: 聆风者 | 来源:发表于2022-09-12 08:26 被阅读0次

    方式一: Object构造函数模式

      * 套路: 先创建空Object对象, 再动态添加属性/方法

      * 适用场景: 起始时不确定对象内部数据

      * 问题: 语句太多

      // 先创建空Object对象

      var p = new Object()

      // 再动态添加属性/方法

      p.name = 'Tom'

      p.age = 12

      p.setName = function (name) {

        this.name = name

      }

    方式二: 对象字面量模式

      * 套路: 使用{}创建对象, 同时指定属性/方法

      * 适用场景: 起始时对象内部数据是确定的

      * 问题: 如果创建多个对象, 有重复代码

    var p = {

        name: 'Tom',

        age: 12,

        setName: function (name) {

          this.name = name

        }

      }

    方式三: 工厂模式

      * 套路: 通过工厂函数动态创建对象并返回

      * 适用场景: 需要创建多个对象

      * 问题: 对象没有一个具体的类型, 都是Object类型

    function createPerson(name, age) { //返回一个对象的函数===>工厂函数

        var obj = {

          name: name,

          age: age,

          setName: function (name) {

            this.name = name

          }

        }

        return obj

      }

      // 创建2个人

      var p1 = createPerson('Tom', 12)

      var p2 = createPerson('Bob', 13)

    方式四: 自定义构造函数模式

      * 套路: 自定义构造函数, 通过new创建对象

      * 适用场景: 需要创建多个类型确定的对象

      * 问题: 每个对象都有相同的数据, 浪费内存

    //定义类型

      function Person(name, age) {

        this.name = name

        this.age = age

        this.setName = function (name) {

          this.name = name

        }

      }

      var p1 = new Person('Tom', 12)

      p1.setName('Jack')

    方式五: 构造函数+原型的组合模式

      * 套路: 自定义构造函数, 属性在函数中初始化, 方法添加到原型上

      * 适用场景: 需要创建多个类型确定的对象

     function Person(name, age) { //在构造函数中只初始化一般函数

        this.name = name

        this.age = age

      }

      Person.prototype.setName = function (name) {

        this.name = name

      }

      var p1 = new Person('Tom', 23)

      var p2 = new Person('Jack', 24)

    相关文章

      网友评论

          本文标题:对象的几种创建方式

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