批量创建对象的几种形式
如果当初咱们心愿创立一系列的对象,,比方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);// 标准:构造函数的首字母最好是大写
构造函数也不是最好解决批量创建对象的办法
毛病:当构造函数中含有函数时,每当咱们创立一个对象,就会从新开拓一个存储该函数的空间,当创立多个对象时就会造成无意义的节约