面向对象
对象:现实中一切事物都叫做对象
面向对象的实体:包含属性和行为的集合
js没有类的概念,叫做对象,思想上是基于对象,js下定义对象还是用函数体定义。
基于对象和面向对象的区别:
面向对象:自己设置图纸,照着图纸盖房子
基于对象:别人有一个房子,我照着房子创建
面向对象的三大特征:
1.封装:每一个对象就是一个封装,把具有共同属性和行为的事务放在一起
2.继承
3.多态
封装:每一个对象就是一个封装,把具有共同属性和行为的事务放在一起
定义对象
1.通过Object创建
var p=new Object()
p.name="小米"//创建变量
p.age=23
p.name="小民"
p.say=function (){//创建方法
console.log(p.name ,p.age)
}
console.log(p)
p.say()//调用方法
2.简写
var p={
name:"小米",
age:22,
say:function(){
console.log(this.name,this.age)//this表示对象是谁
}
}
p.say()
属性操作
configurable 是否可以通过delete删除
enumerable 是否可以通过forin进行遍历
writable 是否可以通过修改属性
value 给属性添加默认值
get 获取属性的方法
set 设置属性的方法
思想:限定陌生人不能操作,但是我自己可以get/set方法访问
限定属性: var obj={name:"小米",age:22}
//对象的属限定
Object.defineProperty(obj,"name",{
configurable:false,
writable:false,
value:"小蓝"
})
设置get和set
var {_name:"小米",age:22}
Object.defineProperty(obj,"name",{
get:function(){//获取变量
return this._name
},
set:function(name){//修改变量
this._name=name
}
})
设置多个属性
var obj={name:"小米",age:22}
Object.defineProperty(obj,{
name:{writable:false,},
age:{enumerable:false}
})
自己创建get和set方法
var obj={
name:"小明",
getName:function(){return this.name},
setName:function(name){this.name=name},
}
console.log(obj.getName())