一.面向对象特征
1.面向对象三大特征
面向对象三大特征:封装、继承、多态
(1)封装:把代码放入对象的方法中
(2)继承:一个对象拥有另一个对象所有的成员
(2)多态:一个对象在不同情况下的不同状态
- js语言基本不涉及多态
2.原型继承
2.1 继承:一个对象(子对象)拥有另一个对象(父对象)所有的成员
2.2 原型继承:把父对象作为子对象构造函数的原型
//父对象
let father = {
house: {
address: '深圳湾一号',
price: 20000000
},
car: {
brand: '劳斯莱斯幻影',
price: 15000000
}
}
//子对象
//构造函数
function Son(name, age) {
this.name = name
this.age = age
}
//原型继承: 把父对象 作为子对象构造函数的原型
Son.prototype = father
//可选 : 原型继承之后,由于父对象覆盖原来的 子对象构造函数原型, 就会导致constructor消失.
//解决办法: 手动添加。(对开发几乎没有影响,也可以不加)
Son.prototype.constructor = Son
//实例对象
let s1 = new Son('ikun', 30)
let s2 = new Son('班长', 20)
console.log(s1, s2)
二.原型链
1.原型链
1.1原型链:每一个对象都有自己的原型,而原型也是对象,也会有自己的原型,以此类推形成链式结构.称之为原型链.(原型链的终点是null)
1.2 对象访问原型链规则:就近原则
对象先访问自己的,自己没有就找原型的,原型没有就找原型的原型,一直到原型链终点null,如果还找不到.属性则获取undefined,方法则会报错 xxx is not function
1.3 原型链的作用(面试题): 继承
2.instanceof运算符
2.1 instanceof(关键字): 运算符。 用于检测 构造函数的prototype在不在实例对象的原型链中
说人话: 亲子鉴定,鉴定两个对象之间有没有血缘关系
2.2 语法: 实例对象 instanceof 构造函数
(面试题) instanceof运算符原理 : 检测 右边构造函数的prototype 在不在 左边实例对象的原型链中 true :在 false :不在
2.3 应用 : 某些函数为了限制你的数据类型,在内部需要用instanceof进行判断是否是正确的数据类型
三.函数补充(了解即可)
1.argumens关键字
1.1 arguments关键字: 获取函数所有的 实参
是一个伪数组 : 有数组三要素(元素、下标、长度),但是不能使用数组的方法
1.2 应用 : 一般用户参数数量不限的函数.
例如: arr.push() Math.max() 这些函数实参数量不限,底层原理就是使用arguments来接收所有的实参
2.剩余参数rest
2.1 剩余参数(rest参数) : 获取函数剩余的所有实参
语法: function 函数名(...形参名){}
function 函数名(形参1,...形参2){}
特点: (1)只能作为最后一个参数 (2)是真数组
2.2 一般情况下,rest参数可以取代arguments
3.函数默认参数
函数默认参数
function 函数名(形参=默认值){ }
function fn(a = 10, b = 20) {
//以前: 逻辑或短路
// 找真 : 左边是真就返回左边式子的值,否则返回右边式子的值
// a = a || 10
// b = b || 20
console.log(a + b)
}