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
}
var s1=student('王一',21) //object
优点:可以量产对象,节省代码量
缺点:但是无法明确对象类型,无法细分,统一是object类型
3.构造函数
想要创建函数,创建一个类
类是指一类事物的统称 包含属性和方法
构造函数的方法来模拟类 利用js this指向性可以改变的问题
this指向对象 window 固定对象 事件源 this也指向运行环境
function student(name,age){
this.name=name
this.age=age
this.eat=function(){
console.log(this.name+'正在吃')
}
}
var s1=new student(“王一”,21)
构造函数通过new来创建对象,new都起到了什么作用
首先 new 创建了一个空对象{ }
在执行函数的过程中,函数内部的this指向创建出来的空对象
讲创建出来的对象 返回出来 然后赋值给到前方变量
优点:可以明确对象的类型
缺点:如果不同对象有相同的方法,没办法公用,
每个都需要独立存储,造成不必要的内存损耗
4.原型创建
prototype属性—原型对象
将不同对象相同的方法或者属性 放到原型中
童工用一个构造函数创建出来的对象原型是相等的
获取对象原型 _prototype_
创建一个学生构造函数 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("王二",23)
优点:方法可以公用,不需要一直创建赋值
缺点:对象的属性以后原型里依然保存,更改一个对象原型里的属性,
所有原型对象属性都会发生改变