对象 Object
开发方式
面向过程
把事物拆分成几个步骤,按照一定的顺序执行
面向对象
把实物抽象成对象,给对象赋予一些属性和方法,然后让对象去执行自己的方法
面向对象的三大特点:封装、继承、多态
封装/创建/定义对象
直接量方式
let obj={
"属性名":"属性值",
...
"方法名":function(){},
...
}
访问对象的属性和方法
obj.属性名 <===> obj["属性名"]
obj.方法名() <===> obj["方法名"]()
//访问到不存在的属性会返回undefined
添加属性和方法
obj.属性名=属性值
obj.方法名=function(){}
遍历对象
for(let i in obj){}
//遍历对象时,想要拿到当前属性的属性值要用obj[i]
注: 在对象的方法里使用对象自己的属性时用this.属性名
预定义构造函数方式
let obj=new Object()
//创建了一个空对象,后续需要添加属性和方法
自定义构造函数方式
创建自定义构造函数
function 类名(name.age,hobby){
this.name=name;
this.age=age;
this.hobby=hobby;
}
注:不要在创建自定义构造函数时创建方法,否则每个对象都会创建出一个相同的方法
调用构造函数创建对象
let obj=new 类名(实参,...)
this的指向
- 单个元素绑定事件:this----->该元素
- 多个元素绑定事件:this------>当前元素
- 定时器:this------>window
- 箭头函数:this------>外部对象
- 函数:this------>调用函数的对象
- 构造函数:this------>当前正在创建的对象
继承
原型的属性和方法,子对象可以直接使用
原型对象
对象名.__proto__;
构造函数名.prototype;
//构造函数名几乎人人都有,除了Math和window