对象的五种创建模式
-
方式一:Object构造函数模式
-
套路:先创建空Object对象,再动态添加属性/方法 适用场景:起始时不确定对象内部数据 **缺点:语句太多** 例子: var p = new Object() p.name = 'zhangsan' p.age = 18 p.setName = function(name){ this.name = name } ……
-
方式二:对象字面量模式
-
套路:使用{}创建对象,同时指定属性/方法 适用场景:起始时对象内部数据是确定的 **缺点:如果创建多个对象,有重复代码** 例子: var p = { name: 'zhangsan', age: 18, setName:function(){ this.name = name } } //要是创建多个对象 就像下面这样产生了重复代码 var p2 = { name: 'lisi', age: 30, setName:function(){ this.name = name } }
-
方式三:工厂模式
-
套路:通过工厂函数动态创建对象并返回【工厂函数:返回一个对象的函数】 适用场景:需要创建多个对象 **缺点:对象没有一个具体的类型,都是Object类型** 例子: function createPerson(name,age){ var obj = { name: name, age: age, setName:function(name){ this.name = name } } return obj } //创建两个人 var p1 = createPerson('Tom',12) var p2 = createPerson('Bob',18)
-
方式四:自定义构造函数模式
-
套路:自定义构造函数,通过new创建对象 适用场景:需要创建多个类型确定的对象 **缺点:每个对象都有相同的数据,浪费内存** 例子: function Person(name,age){ this.name = name this.age = age this.setName = function(name){ this.name = name } } var p1 = new Person('Tom',12)
-
方式五:构造函数+原型的组合模式
-
套路:自定义构造函数,属性在函数中初始化,方法添加到原型上 适用场景:需要创建多个类型确定的对象 例子: function Person(name,age){//构造函数中只初始化属性 this.name = name this.age = age } Person.prototype.setName = function(name){ this.name = name }