持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第13天,点击查看活动详情
- 面向对象
- 面向对象的三大特点
- this
- this共有几种情况
- 创建对象
- JS中创建对象共有几种方式
- 继承
- JS中实现继承共有几种方式
- 深克隆
- 实现深克隆共有几种方式
面向对象
面向对象的三大特点:封装、继承、多态
封装
封装就是创建一个对象,集中保存现实中一个事物的属性和功能。
方式1:直接量 {}
var obj = { // new Object() 的简写
属性名: 属性值,
方法名: function() {...}
}
对象的大括号只代表 new Object() 的简写,它不代表任何的作用域
- 在方法内使用obj的属性
var obj = {
name: "hayes",
age: 18,
print: function () {
console.log(`姓名:${this.name},年龄:${this.age}`)
}
}
obj.print()
还可以写死:将 this 替换为 obj。但是这样就紧耦合了,不要使用。
- 什么是
this- 每个函数内自带的
- 专门指向正在调用当前函数的 .前的对象 的关键字
this保存在作用域对象中,一般只有函数才有作用域
在上述代码中调用 print() 函数时,是通过 obj 调用的,所以当前 this 就指向 obj
总结:对象中的方法,要想使用当前对象自己的属性或其他方法时,都要加 this
方式2:new Object()
var 对象名 = new Object(); // 先创建空对象 {}
// 再强行给空对象中添加新属性和新方法
对象名.新属性 = 属性值;
对象名.新方法 = function(){...}
- js中所有对象底层都是关联数组
方式3:用构造函数
上面两种方式的问题:用 {} 一次只能创建一个对象。如果想创建多个相同结构的对象时,代码就会很多重复!------及其不便于将来的维护。
构造函数:描述同一类型的所有对象的统一结构的函数。
为什么使用构造函数:代码复用(复用对象的结构)。
- 定义构造函数
function 类型名(arg1, arg2, ...){
// 将来要加入到新对象中的规定的属性
this.属性名 = arg1;
this.xxx = xxx;
this.方法名 = function() {...}
}
- 使用构造函数反复创建多个结构相同的对象
var 对象名 = new 类型名(实参1, 实参2, ...)
那么 new 一共干了几件事?
- 创建指定类型的一个新对象
- 同时把实参值传给构造函数的形参变量