Js高级知识点-面向对象.原型.继承

1.面向对象编程介绍

  1. 面向过程POP:分析出解决问题的所需要的的步骤,用函数来实现步骤,使用的时候在一一调用
  2. 面向对象OOP:把事务分解成一个个的对象,由对象之间分工合作
    面向对象是以对象功能来划分问题的
    特性:封装性、继承性、多态性
  3. 面向对象缺点:性能比面向过程低
  4. 面向对象缺点:易维护、易复用。易拓展

2.ES6 中的类和对象

  1. 面向对象的思维特点:抽取对象公用的属性和行为封装成一个类,然后对类进行实例化,获取类的对象
  2. 对象:一组无序的相关属性和方法的集合,特指某一个,是类实例化出来的
  3. 类(class):抽取对象的公共部分,泛指某一大类

创建类: class 类名{}

利用类创建对象:var 实例对象名=new 类名(),括号里面可以写实参

  1. 类里面有constructor函数,可以接受传递过来的参数,同时返回实例对象
  2. constructor里面的this指向的是创建的实例对象
    在类里面创建方法:方法名(){}
  3. 类里面所有的参数不需要写function,多个函数之间不需要加逗号分离

3.类的继承

  1. 子类可以继承父类的属性和方法,extends
    class Father{//父类}
    class Son extends Father{
    //子类继承父类}
  2. super() 关键字:调用父类中的构造函数,也可以调用父类之间的普通函数,必须在子类this之前使用
  3. 类里面的公用的属性和方法一定要前边加上this使用
  4. 在ES6类中并没有变量提升,必须要先定义类,才能够通过实例化对象

4.构造函数和原型

1.构造函数定义

  1. 主要用来初始化对象,总与new一起使用,我们可以把一些对象中的公共属性和方法抽取出来
  2. 实例对象:
  1. 是构造函数内部通过this添加的成员 eg:this.name=name
  2. 只能通过实例化的对象来访问 eg:console.log(ldh.name)

3.静态成员

  1. 在构造函数本身上添加的成员 eg:Star.sex=“男”
  2. 只能通过构造函数才能使用

4.构造函数存在资源浪费的问题

2.构造函数原型prototype

  • 我们可以把不变的方法,直接定义在prototype对象上,使共享
  • 一般把公共属性/定义放在构造函数里面

构造函数名.prototype.方法名=function(){}

3.对象原型 proto

  1. Star构造函数(相当于父亲)通过Star.prototype——>Star原型对象prototype(孩子)
  2. Star原型对象prototype通过Star.prototype.constructor——>Star构造函数
  3. 对象实例通过实例名.proto ——>Star原型对象prototype

4.constructor构造函数0

  • 对象原型(proto)h和构造函数(prototype)原型对象都有一个属性constructor属性
  • 很多情况下我们要手动的利用constructor属性来指回原来的函数

5.原型链

  1. 只要有对象就有__proto__原型,指向原型对象
  2. Star原型对象里面的__proto__原型指向的是Object.prototype

6.JavaScript的成员查找机制

  1. 当访问一个对象的属性和方法是否有该属性时
  2. 没有就查找他的原型(也就是 __proto__指向的prototype原型对象)
  3. 若还是没有就找对象的原型(Object的原型对象)
  4. 以此推类找到Object为止(null)

7.原型对象this的指向

  1. 构造函数里面的this指向的是对象实例
  2. 原型对象函数里面的this指向的也是实例对象

8.扩展内置对象:拓展自定义方法

  1. 数组和字符串内置对象不能给原型对象覆盖操作Array.prototype={}
  2. 必须是Array.prototype.xxx=function(){}的方式

5.继承

1.call()

  1. 调用这个函数,并且修改函数运行时的this指向
  1. fun.call(thisArg,arg1,arg2…)
  2. 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()

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值