一、创建对象的方法
//创建一个学生对象 属性 :名称,身高,年龄 方法:吃饭 ,跑
1、直接声明对象(最基础的创建对象的方法)
好处:简单,方便
缺点:无法进行量产
var s1={
name:"王一",
height:180,
age:21,
eat:function(){
console.log(this.name+"正在吃饭")
},
run:function(){
console.log(this.name+"正在跑")
}
}
2、工厂模式创建对象
好处:快速量产
弊端:通过工厂模式创建的对象,没法去检测对应的类型
function createStudent(name,age,height){
var obj=new Object()
obj.name=name
obj.height=height
obj.age=age
obj.eat=function(){
console.log(this.name+'正在吃')
}
return obj
}
var s1=createStudent("王一",21,180)
var s2=createStudent("王二",22,192)
3、构造函数创建对象
javascript :原本不存在类这个概念
构造函数 来模拟类
其他类型的语言 ,创建对象->类
类:描述一系列相同类型事物的总称 人 动物
构造函数:js this的指向性问题
需要五个学生对象 ,创建一个学生类(构造函数 )
学生类:name,age,height 方法 eat run
通常构造函数的首字母大写 类的首字母大写
构造函数方法
好处:1.量产 2.解决了工厂模式 无法分辨指定类型的问题
弊端:同样的方法,会开辟不同的存储空间,造成内存的大量消耗
function Student(name,age,height){
this.name=name
this.age=age
this.height=height
this.eat=function(){ //明明是同一种方法,但是不相等 每一个对象中eat方法,都有一个自己独立的存储空间
console.log(this.name+'正在吃')
}
}
var s1=new Student("王一",21,180)
var s2=new Student("王二",55,58)
new 做了什么? 面试题
1. 创建一个空对象 {}
2. 将构造函数中的this指向 空对象
3. 将构造函数中所有属性 和方法 都赋值给{}
4. 将对象返回
4、原型对象(将共用的方法 放到原型上 直接进行调用)
构造函数 :内存消耗 共有的方法 写到原型中来节约内存 构造函数中原型 ==对象中的原型 __proto__
将共有的方法写到构造函数的原型中 ,实例化对象以后 就可以通过原型 拿到其方法
function Student(name,age,height){
this.name=name
this.age=age
this.height=height
}
Student.prototype.eat=function(){
console.log(this.name+"正在吃")
}
var s1=new Student("王一",21,180)
var s2=new Student("王二",22,222)
s1.__proto__.run=function(){
console.log(this.name+"正在跑")
}
备注:
开发过程中 ,存在各种各样的对象 比如: 老师对象 学生对象
判断当前这个对象是否属于老师
instanceof 用于检测对应的数据类型的(简单的数据类型 数值,字符,布尔 中,必须通过new 来创建的检测成功)
typeof() 返回数据类型