1.直接创建法
创建一个学生对象:名称,年龄 方法:吃饭
var student={
name:'王一',
age:21,
eat:function(){
console.log(this.name+"正在吃")
}
}
好处:创建简单
弊端:无法量产
2.工厂模式
通过函数来创建对象
重复的创建对象 ,需要创建时可以快速的创建出来
将创建对象的过程 封装到函数内部 ,直接调用函数进行对象创建
function Student(name,age){
var s=new Object()
s.name=name
s.age=age
s.eat=function(){
console.log(this.name+'正在吃')
}
return s
}
function Teach(name,age){
var t=new Object()
t.name=name
t.age=age
t.eat=function(){
console.log(this.name+'正在吃')
}
return t
}
var s1=Student("王一",21) //object
var t1=Teach("张三",30) //object
好处:可以量产对象
弊端: 无法明确对象的类型 ,全都是object类型的,无法类型的细分
3.构造函数
其他的编程语言当中,想要创建对象的话,创建一个类
类:一类事物的统称 包含 属性和方法
js中没有类概念
构造函数的方式来模拟类!!! 利用js this指向性可以改变的问题
this指向 对象 window 固定对象 事件源 this指向运行环境
function Student(name,age){
this.name=name
this.age=age
this.eat=function(){
console.log(this.name+"正在吃")
}
}
function Teach(name,age){
this.name=name
this.age=age
this.eat=function(){
console.log(this.name+"正在吃")
}
}
var s1=new Student("王一",21)
var s2=new Student("王二",22)
通过new来创建对象 new做了什么?
1.创建一个空对象 {}
2.在执行函数的过程中 ,函数内部 this指向创建出来的{}
3.将创建对象 返回出来,赋值给前方变量
好处:可以明确对应的对象类型
弊端:不同对象中的相同方法,无法公用,需要独立存储,造成内存损耗
4.原型创建
Prototype属性 :原型对象
想办法将 公有的方法或者属性 放到原型中呢
通过同一个构造函数创建出来的对象原型是相等的
对象的原型__proto__
构造函数创建对象时共有的方法,没办法统一存储 ,需要独立开辟空间造成内存消耗
发现 每一类相同的对象 ,原型对象都是一个样 ,想办法将公有的方法 放到原型中
创建一个学生构造函数 name,age eat公有方法
构造函数原型 == 实例化对象的原型
将共有的方法放入构造函数的原型中
function Student(name,age){
this.name=name
this.age=age
}
Student.prototype.eat=function(){
console.log(this.name+'正在吃')
}
var s1=new Student("王一",21)
var s2=new Student("王二",22)
好处:方法共有,不用一直创建赋值
弊端:但是对象的属性以后原型里依然保存属性;