面向对象的三大特征:(满足两个)
-
封装:把代码放入对象的方法中
-
继承:
一个对象 拥有 另一个对象 所有的成员
-
多态: 一个对象 在不同情况下的不同状态
js中一般不涉及多态,主要是继承
原型链(继承)
-
原型对象:存储具有共同特征的数据
-
原型继承:把父对象 作为子对象构造函数的原型
-
终点:null
-
对象访问原型链的规则:
- 对象先访问自己的,自己没有就找原型的,原型没有就找原型的原型的原型,一值到原型终点null,如果还找不到,属性则获取undefined,方法则会报错 xxx is not function
-
instanceof(关键字):运算符,用于检车构造函数的prototype在不在实例对象的原型链中。
-
检测:右边构造函数prototype在不在 左边实例对象的原型链中
-
/ arr->Array.prototype->Object.prototype->null let arr = [10,20,30] console.log( arr instanceof Array )//true console.log( arr instanceof Object )//true console.log( arr instanceof String )//false
作用:某些函数为了限制数据类型,在内部需要instanceof进行判断是否是正确的类型数据类型。
-
arguments关键字
-
作用:获取函数的所有
实参
-
是一个伪数组:有数组的三要数(元素、下标、长度)但是不能使用数组的方法
-
应用:一般用户参数数量不限的函数
-
例如:arr.push() 、 Math.max() 这个函数的实参数量不限,底层原理就是使用arguments来连接所有的实参
rest参数
-
剩余参数(rest参数):获取函数剩余的所有实参
-
特点:(1)只能作为一个参数 (2)是真数组
-
一般情况下,rest参数可以替代arguments
-
语法:
function fn1() { console.log(arguments) //[10, 20, 30, 40, 50] } function fn(...b) { console.log(b) //[10, 20, 30, 40, 50] console.log(arguments) //[10, 20, 30, 40, 50] } function fn2(a, ...b) { console.log(b) //[ 20, 30, 40, 50] console.log(arguments) //[10, 20, 30, 40, 50] } fn(10, 20, 30, 40, 50) fn1(10, 20, 30, 40, 50) fn2(10, 20, 30, 40, 50)