js高级知识点
1.面向对象编程介绍2.ES6 中的类和对象3.类的继承4.构造函数和原型1.构造函数定义2.构造函数原型prototype3.对象原型 __proto__4.constructor构造函数05.原型链6.JavaScript的成员查找机制7.原型对象this的指向8.扩展内置对象:拓展自定义方法
5.继承1.call()2.继承:借用构造函数继承父类型的属性3.继承:借用构造函数继承父类型的方法
6.ES5中新增的方法1.数组方法1.forEach()2.filter()3.some()
2.字符串方法3.对象方法1.Object.keys(obj)2. Object.defineProperty()
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()删除左右两边的空白格
3.对象方法
1.Object.keys(obj)
2. Object.defineProperty()