对象创立模式

Object构造函数模式

  • 套路:先创立空Object对象,再动静增加属性/办法
  • 应用场景:起始时不确定对象外部数据
  • 问题:语句太多
        var p = new Object()        p.name = 'Tom'        p.age = 12        p.setName = function (name){            this.name = name        }                p.setName('JACK')        console.log(p.name,p.age)        

对象字面量模式

  • 套路:应用{}创建对象,同时指定属性/办法
  • 实用场景:起始时对象外部数据是确定的
  • 问题:如果创立多个对象,有反复代码

          var p = {          name:'TOM'          age:'12'          setName:function(name){              this.name=name          }      }            console.log(p.name,p.age)      p.setName('jack')      console.log(p.name,p.age)            var p2={          name:'BOB'          age:'13'          setName:function(name){              this.name = name          }      }      

工厂模式

  • 套路:通过工厂函数动静创建对象并返回
  • 实用场景:须要创立多个对象
  • 问题:对象没有一个具体的类型,都是Object类型
        function creatPerson(name,age){    //返回一个对象的函数==>工厂函数            var obj={                name:name,                age:age,                setName:function (name){                    this.name = name                }            }                        return obj        }                //创立2集体        var p1 = creatPerson('TOM',12)        var p2 = creatPerson('BOB',13)        //p1,p2是Object类型        function creatStudent(name,price){            var obj = {                name:name,                price:price            }            return obj        }        var s = creatStudent('张三',12000)                

自定义构造函数模式

  • 套路:自定义构造函数,通过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')      console.log(p1.name,p1.age)            function Student(name,price){          this.name = name          this.price = price      }      var s = new Student('BOB',13000)      console.log(s instanceof Student)            var p2 = new Person('JACK',23)      console.log(p1,p2)      

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

  • 套路:自定义构造函数,属性在函数中初始化,办法增加到原型上
  • 实用场景:须要创立多个类型确定的对象

          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)      console.log(p1,p2)