JS创建对象的几种方式

1.Object构造函数模式

var obj = new Object();

obj.name = 'Tom';

obj.age = 11;

obj.setName = function(name){

  this.name = name;

}

适用场景:创建对象起始时候不确定对象内部的数据

问题:语句太多

 

2.对象字面量模式

var p = {

  name:'Tom',

  age:'11',

  setName:function(){

    this.name = name;

  }

}

var p1 = {

  name:'Jack',

  age:'15',

  setName:function(){

    this.name = name;

  }

}

适用场景:创建对象时就知道内部需要哪些属性,同类型对象只创建一个

问题:创建同类型的多个对象时候,要重复定义这些相同的属性和方法

 

3.工厂模式(很少用)

function createPerson(name,age){

  var obj = {

    name:name,

    age:age,

    setName:function(name){

      this.name = name;

    }

  }

  return obj;

}

使用场景:同类型对象需要创建多个

问题:返回的对象都是Object类型,没有具体的类型

 

4.自定义构造函数模式

function Person(name,age){

  this.name = name;

  this.age = age;

  this.setName = function(name){

    this.name = name;

  }

}

var p = new Person('Tom',11);

var p1 = new Person('Jack',15);

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

问题:创建的对象的方法是相同的重复数据

 

 

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

function Person(name,age){

  this.name = name;

  this.age = age;

}

Person.prototype.setName(name){//这样设置所有的对象的方法都去原型链上面找,最后都找到Person.prototype对象上,就不会存在每个对象都要花费内存来再属性上存一个相同的方法

  this.name = name;

}

var p = new Person('Tom',11);

var p1 = new Person('jack',15);

适用场景:需要创建多个具体类型的对象

posted @ 2020-02-09 11:33  maycpou  阅读(130)  评论(0编辑  收藏  举报