1.直接创建对象
优点:非常的简单
缺点:不能进行相同对象的量产,他只能一个对象一个对象的创建
var obj={
name:"张三",
age:18,
sex:"男"
}
console.log(obj)
2.工厂模式创建
对对函数进行封装,每调用一次就创建一个对象
优点:解决了第一种直接创建对象方法不能对相同对象的量产的问题,他可以对相同对象进行量产
缺点:但是他无法确定类型,就是他只能创建相同对象
比如要我们用下面的代码去创建一个学生对象和一个老师对象,这时候我们的工厂模式就创建不了
function createStudent(name,age,sex){
var obj={}
obj.name=name
obj.age=age
obj.sex=sex
obj.showinfo=function(){
console.log(this)
}
return obj
}
var s1=createStudent("王五",21,"男")
s1.showinfo()
3.构造函数创建
构造一个函数,利用this的指向性。
这里的new的作用:1.先创建一个空的对象
2.执行后方的函数,然后让函数内部的this指向空对象
3.将创建出来的对象返回
优点:可以实现量产,并且能够确定类型
缺点:我们同时创建两个学生时,都得调用Student,但是我们会发现,函数里的showinfo方法会被调用两次。这样会导致内存的消耗。
function Student(name,age,count){
this.name=name
this.age=age
this.count=count
this.showinfo=function(){
console.log(this)
}
}
var s1=new Student("张丹",14,100)
s1.showinfo()
4.原型创建对象
这个创建方法就相当于第三种,只不过是对第三种的缺点的一个改进
由第三种创建方法,我们知道了他的一个缺点,就是可能共有的函数会被多次执行。要解决这个就要利用对象的原型,因为利用相同构造函数创建的对象,他们的原型是相同的。所以我们只要在原型中加入他们所共有的函数就可以解决这个内存消耗的问题。
function Student(name,age,count){
this.name=name
this.age=age
this.count=count
this.showinfo=function(){
console.log(this)
}
}
var s1=new Student("张丹",14,100)
var s2=new Student("里斯",15,98)
s2.showinfo()
s1.showinfo()
这里可以看到控制台里输出的对象每个showinfo 都占用了一个空间这样就会到值内存的消耗
function Student(name,age,count){
this.name=name
this.age=age
this.count=count
}
Student.prototype.showinfo=function(){
console.log(this)
}
var s1=new Student("张丹",14,100)
var s2=new Student("里斯",15,98)
s2.showinfo()
s1.showinfo()
我们只在Student这个对象的原型下添加了函数,之后就不用每次调用都占用内存去存储函数