批量创建对象的几种方式

如果现在我们希望创建一系列的对象,,比如person对象

工厂模式

//工厂模式
// 只需要通过该函数就可以创造出大量对象
function createPerson(name,age,address,sno){
    var p = {}
    p.name = name
    p.age = age
    p.address = address
    p.sno = sno
    p.eating = function(){
        console.log(this.name+`正在玩耍`);
    }
    p.running = function(){
        console.log(this.name+`zhengzai`);
    }
    return p
}
var p1 = createPerson("张三",19,"北京市","110")
var p2 = createPerson("张四",29,"北京市","110")
// 工厂模式的缺点:获取不到对象最真实的类型
// 1.当我们打印使用工厂函数创建出来的对象时,会发现,对象类型时Object,并不是Person类型
// 也就是说使用工厂函数创建出来的对象并没有一个比较具体类型,只能看出时object类型

构造函数

构造函数也称为构造器(constructor),通常是我们创建对象时会调用的函数
在其他编程语言中,构造函数时存在于类中的一个方法,称之为构造方法
但是js中的构造函数不太一样

认识构造函数
构造函数也是一个普通的函数
一旦通过new关键字去调用一个函数,那么这个函数就是一个构造函数了
通过new关键字创建对象时,会执行以下操作
1.在内存中创建一个新的对象(空对象)
2.这个对象内部的[[prototype]]属性会被赋值为该构造函数的prototype属性
3.构造函数内部的this会指向创建吹来的新的对象
4.执行函数的内部代码(函数体代码)
5.如果构造函数没有返回非空对象,则返回创建出来的新对象

function person(name, age, height, address) {
  //将传递进来的属性添加到对象上
  this.name = name;
  this.age = age;
  this.height = height;
  this.address = address;

  this.running = function(){
    console.log(this.name+'在跑步');
  }

}
var per1 = new person('张三三',18,1.65,'北京市')
// 这里打印的per1的类型就是person了
// 这里就可以拿到具体的对象类型
console.log(per1);

// 规范:构造函数的首字母最好是大写

构造函数也不是最好解决批量创建对象的方法
缺点:当构造函数中含有函数时,每当我们创建一个对象,就会重新开辟一个存储该函数的空间,当创建多个对象时就会造成无意义的浪费

构造函数结合原型--最优批量创建对象的方式

function Person(name, age, height, address) {
  this.name = name;
  this.age = age;
  this.height = height;
  this.address = address;
}
// 原型结合构造函数创建对象
Person.prototype.eating = function () {
  console.log(this.name + "eating");
};
Person.prototype.running = function () {
  console.log(this.name + "running");
};

var p1 = new Person('jjj',18,1.60,"北京市")
var p2 = new Person('2222',18,1.60,"北京市")

its
1 声望0 粉丝

« 上一篇
PHP
下一篇 »
js3--原型