1.面向对象编程介绍
- 面向过程POP:分析出解决问题的所需要的的步骤,用函数来实现步骤,使用的时候在一一调用
- 面向对象OOP:把事务分解成一个个的对象,由对象之间分工合作
面向对象是以对象功能来划分问题的
特性:封装性、继承性、多态性- 面向对象缺点:性能比面向过程低
- 面向对象缺点:易维护、易复用。易拓展
2.ES6 中的类和对象
- 面向对象的思维特点:抽取对象公用的属性和行为封装成一个类,然后对类进行实例化,获取类的对象
- 对象:一组无序的相关属性和方法的集合,特指某一个,是类实例化出来的
- 类(class):抽取对象的公共部分,泛指某一大类
创建类: class 类名{}
利用类创建对象:var 实例对象名=new 类名(),括号里面可以写实参
- 类里面有constructor函数,可以接受传递过来的参数,同时返回实例对象
- constructor里面的this指向的是创建的实例对象
在类里面创建方法:方法名(){}
- 类里面所有的参数不需要写function,多个函数之间不需要加逗号分离
3.类的继承
- 子类可以继承父类的属性和方法,extends
class Father{//父类}
class Son extends Father{
//子类继承父类}- super() 关键字:调用父类中的构造函数,也可以调用父类之间的普通函数,必须在子类this之前使用
- 类里面的公用的属性和方法一定要前边加上this使用
- 在ES6类中并没有变量提升,必须要先定义类,才能够通过实例化对象
4.构造函数和原型
1.构造函数定义
- 主要用来初始化对象,总与new一起使用,我们可以把一些对象中的公共属性和方法抽取出来
- 实例对象:
- 是构造函数内部通过this添加的成员 eg:this.name=name
- 只能通过实例化的对象来访问 eg:console.log(ldh.name)
3.静态成员
- 在构造函数本身上添加的成员 eg:Star.sex=“男”
- 只能通过构造函数才能使用
4.构造函数存在资源浪费的问题
2.构造函数原型prototype
- 我们可以把不变的方法,直接定义在prototype对象上,使共享
- 一般把公共属性/定义放在构造函数里面
构造函数名.prototype.方法名=function(){}
3.对象原型 proto
- Star构造函数(相当于父亲)通过Star.prototype——>Star原型对象prototype(孩子)
- Star原型对象prototype通过Star.prototype.constructor——>Star构造函数
- 对象实例通过实例名.proto ——>Star原型对象prototype
4.constructor构造函数0
- 对象原型(proto)h和构造函数(prototype)原型对象都有一个属性constructor属性
- 很多情况下我们要手动的利用constructor属性来指回原来的函数
5.原型链
- 只要有对象就有__proto__原型,指向原型对象
- Star原型对象里面的__proto__原型指向的是Object.prototype
6.JavaScript的成员查找机制
- 当访问一个对象的属性和方法是否有该属性时
- 没有就查找他的原型(也就是 __proto__指向的prototype原型对象)
- 若还是没有就找对象的原型(Object的原型对象)
- 以此推类找到Object为止(null)
7.原型对象this的指向
- 构造函数里面的this指向的是对象实例
- 原型对象函数里面的this指向的也是实例对象
8.扩展内置对象:拓展自定义方法
- 数组和字符串内置对象不能给原型对象覆盖操作Array.prototype={}
- 必须是Array.prototype.xxx=function(){}的方式
5.继承
1.call()
- 调用这个函数,并且修改函数运行时的this指向
- fun.call(thisArg,arg1,arg2…)
- thisArg指的是当前调用函数this的指向
2.继承:借用构造函数继承父类型的属性
- 通过call()把父类型的this指向子类型的this
3.继承:借用构造函数继承父类型的方法
- Son.prototype=Father.prototype;不能直接这样赋值,如果要是修改了子原型的对象,父原型对象会跟着一起变化
- 应该是:Son.prototype=new.Father()
- 如果利用对象的形式修改了原型对象,要用constructor指回原来的原型对象 Son.prototype.constructor=Son;
6.ES5中新增的方法
1.数组方法
迭代(遍历):forEach(),map(),filter(),some(),every()
1.forEach()
Array.forEach(function(Value,index,arr))
- Value指的是数组当前项的值
- index是数组当前项的索引
- arr指的是数组对象本身
2.filter()
Array.filter(function(Value,index,arr))
- 主要是用于筛选对象
- 他直接返回的是一个新数组,用一个var xx来接住这一串代码
- return 筛选的条件
3.some()
Array.some(function(Value,index,arr))
- 查找数组中是否有满足条件的元素
- 返回的是布尔值
- 找到对象就终止循环,否则就一直查找
2.字符串方法
trim()删除左右两边的空白格