js面向对象
- 能够说出什么是面向对象
- 能够说出类和对象的关系
- 能够使用class创建自定义类
- 能够说出什么是继承
- 面向对象编程介绍
- ES6中的类和对象
- 类的继承
- 面向对象案例
1.面向对象编程介绍
1.面向过程:pop就是将每一个步骤用函数封装再依次调用
2.面向对象:oop就是先找出对象,然后由对象之间分工合作
3.面向对象三大特性:封装性,继承性,多态性
2.ES6中的类和对象
类指的是一大类,对象是特指的某一个,通过类实例化一个具体。抽取对象共用的属性和方法变成一个类
语法:class name{};创建实例:var xx = new name();
constructor()方法是类的构造函数,用于传递参数,返回实例对象
3.类的继承
class father{};class son extends father{}子类继承了父类里的属性和方法
super关键字:可以调用父类中的方法和构造函数和普通函数
super()必须在子类this之前调用
三个注意点:1.必须先有类,才能实例化,再调用方法 2.共有属性和方法必须加个this.调用
constructor()的this指向的是创建的实例对象,方法里面的this指向的是调用者
构造函数和原型
1.构造函数和原型
function star(参数){对象的公共部分}。注意:首字母要大写,构造函数要和New一起使用才有意义
new在执行时会做四件事:1.在内存中创建一个新的空对象2.让this指向这个新的对象3.执行构造函数里面的代码,给这个新对象添加属性和方法4.返回这个新对象
静态成员:在构造函数本身上添加的成员,静态成员只能通过构造函数来访问
实例成员就是构造函数内部通过this添加的成员,实例成员只能通过实例化的对象来访问
构造函数存在浪费内存的问题:通过原型分配的函数是所有对象所共享的prototype
原型是一个对象,我们也称为prototype为原型对象
原型的主要作用是共享方法
对象原型_proto)
构造函数,实例,原型对象三者之间的关系.铁三角图
star原型对象里面的_roto_原型指向的是Object.prototype
原型链见图!!!
this指向问题:原型对象函数里的this指向的也是实例对象
扩展内置对象:数组和字符串里不能用对象方式添加方法,只能用自定义方法
2.继承
1.组合继承:call(),call()可以改边这个函数的this指向。father.call(this,参数)通过构造函数继承属性,通过原型对象son.prototype=new father();son.prototype.constructor=son
3.ES5新增的方法
1.数组新增的方法:遍历方法:forEach(function(value,index,array){}),map(),filter(),some(),every()
filter(function(value,index,array){})通过检查指定数组中符合条件的所有元素,主要用于筛选数组,直接返回一个新数组
some(function(value,index,array)用于检测数组中的元素是否满足指定条件,返回的是布尔值,如果找到第一个满足条件的元素则终止循环
2.字符串新增的方法:str.trim()该方法会从一个字符串的两端删除空白字符,不影响字符串本身,返回的是一个新的字符串
3.对象方法(重要):Objects.keys()用于获取对象自身所有的属性类似于for...in返回一个由属性名组成的数组
Object.defineProperty()定义对象中新属性或修改原有的属性;Object.defineProperty(obj,prop,descriptor)writable:false不允许修改这个属性
enumerable:false不会被遍历出来,configurable目标属性能否被删除或者再次修改特性