批量创建对象的几种方式
如果现在我们希望创建一系列的对象,,比如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,"北京市")
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。