面向对象

面向对象是一种编程思路,不会改变预期效果
优点:使用面向对象,会提高代码的复用性,便于迭代

创建

1.字面量
let obj={ }
2.构造函数

let obj = new Object()
函数名的首字母大写,一次来和普通的函数区分
new运算符,也叫构造器,配合使用的函数,被称为构造函数
作用:1.执行该函数
   2.隐式创建一个对象
   3.把该对象和函数的this指向互相绑定
   4.可以把this中的属性和方法都加到该对象上
   5.函数执行后,返回该对象
代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

3.工厂模式

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

使用

1.通过点语法
2.通过中括号

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

原型

每次通过构造函数去去实例化对象,都会生成一个新的内存空间
当项目开发中,往往大量的内存使用,会严重影响性能
原型: 将公有的方法,放到原型中,每次实例化对象,原型中的内容是公有的,不会再分配新的空间给对象(构造函数中的属性/方法 会)
原型中的方法,地址相同,是一个公有的内存
构造函数中的方法,地址不相同。 两个独立的内存

继承

通过某一种方式让一个对象,可以访问并使用到另一个对象中的内容,这种行为我们叫做继承
作用:节省了各个构造函数中,大量重复的属性和方法,提高了开发效率,并节省了内存

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

构造函数继承
继承的方法:call与apply方法的使用,达成了构造函数继承的作用
区别:call接受参数时,数量根据被借用者需要的参数而
   apply只有两个参数,借用者与数组(存放所有参数)
call 对象冒充,又叫对象借用
语法:被借用者.call(借用者,被借用的参数)

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

apply() 方法与call相同,都用于借用对象
语法:被借用者.apply(借用者,[被借用者的参数])

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

原型链继承
将父类的实例化对象赋值给子类的原型
语法:子类的构造函数名.constructor=父类的实例化对象
优点:类似于赋值了一个对象,构造函数和原型中所有的数据都可以获取到,简约方便使用
缺点:1.原型链继承自身无法传参
   2.父类所有的属性和方法都可以被所有子类共享

组合继承
类式继承,无法获取父类的原型链
原型链继承,无法直接给父类传参
组合继承=类式继承+原型链继承
结合优点,弥补缺点

代码:
在这里插入图片描述显示效果:
在这里插入图片描述

传值和传址

传值:简单数据类型,传递数值,开辟新地址
传址:复杂数据类型,传递地址,共享同一个内存空间

浅拷贝:只拷贝数值,不拷贝地址,节省内存,但是因为共享内存,所以互相影响数据
深拷贝:数值和内存都拷贝,内存空间相互独立,不互相影响数据

深拷贝
方法一:
通过JOSN.parse()JOSN.stringify()
将通过上述两种方法处理过后的对象赋值给新变量
方法二:

在这里插入图片描述

操作符

1.instanceof() 判断一个实例对象,是否是某个函数的实例
语法:对象名 instanceof 函数名

代码:
在这里插入图片描述显示效果:
在这里插入图片描述

2.isPrototypeOf() 判断该原型是否是该对象所属原型
语法:原型名.isPrototypeOf(对象名)

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

3.hasOwnProperty()用来检测当前对象中是否有该属性, 返回值为布尔类型
不会检查原型和原型链上的内容,只会去查找构造函数中的内容
语法:对象名.hasOwnProperty("属性/方法名")

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

4.delete 用来删除属性
语法:delete 属性

代码:
在这里插入图片描述
显示效果:
在这里插入图片描述

5.in 检查该对象是否包含指定属性
检查范围包括对象的直接属性和prototype继承来的属性,不包括原型自身的属性/方法(原型重构,被覆盖)
语法:属性/方法名 in 对象

代码:
在这里插入图片描述显示 效果:
在这里插入图片描述

拖拽

在这里插入图片描述在这里插入图片描述在这里插入图片描述

 作为创建对象的模板,通过class关键字来定义类
 语法:
在这里插入图片描述在这里插入图片描述
类中自带的方法:set/get
在这里插入图片描述在这里插入图片描述属性表达式:
 类的外部定义,原型的自定义名称用中括号包起来
在这里插入图片描述
在这里插入图片描述

严格模式(代码规范)

 1.在script标签中第一行写use strict,表明以下代码使用严格模式(或者式js文件中的第一行)
 2.使用代码的定义,使用更加规范,避免一些诡异的运行行为
 3.在后续的ES特性和一些Angular等js框架中,要求必须在严格模式下运行
 4.使代码的编译和运行更加高效
注意:
 1.ES5中,默认为非严格模式,需要使用use strict,ES6中默认为严格模式
 2.不存在变量提升
 3.在类和模块{}内部,默认就是严格模式,其实未来所有代码都是运行在模块中,所以可以说
  ES6实际把整个语言升级到了严格模式

对变量的影响

 1.变量必须要先声明后使用
 2.不可以使用任意保留字/关键字作为变量名
 3.严格模式不再允许用户删除变量(delete)

对对象的影响

 1.对只读属性赋值会抛出异常(报错)
 2.对不可配置的属性使用delete操作符会抛出异常
 3.对不可扩展的对象添加属性,会抛出异常
 4.不可以使用with简化对象访问

对函数的影响

 1.在普通函数当中,不允许使用this引用当前window对象
 2.在严格模式中,函数的参数必须是唯一的(不允许重复)
 3.在严格模式中,arguments对象的值,和形参的值是完全独立的,虽然修改形参的值也会反映
  到arguments对象中

类的继承

子类通过 extends 关键字来继承父类的所有属性和方法
子类必须在constructor中调用super方法,否则新建实例会报错
在这里插入图片描述在这里插入图片描述

ES5和ES6中继承的区别

 ES5的继承中,实质是先创造子类的实例对象this,然后再将父类的方法/属性添加到this上面。
 ES6的继承中,实质是先创造父类的实例对象this, 然后再将子类的方法/属性添加上必须先通过父类的构造函数完成塑造(this对象–实例对象),然后再对其加工,加上子类自身的属性和方法,如果不调用super方法,子类就得不到this对象

静态属性和静态方法

static关键字
在属性前加上static,为静态属性

方法前:
1.static关键字,表明该方法是一个静态方法
2.需要同故宫类名来调用,而不是在实例(this)上调用
3.如果使用this调用,或者在该方法中使用this,均会出现异常
4.静态方法和非静态方法不重名(不推荐)
5.父类的静态方法,可以被子类继承

在这里插入图片描述
显示效果:
在这里插入图片描述

Event事件池

 类,事件池,记录所有的相关事件及处理函数
 事件存放形式:
event={
  事件名:[f1,f2,f3],
  事件名:[f1,f2,f3]
}

添加事件的功能
在这里插入图片描述
删除事件的功能
在这里插入图片描述
执行触发的事件
在这里插入图片描述

模块化

模块化是运行在服务器上的内容
优点:按需加载
导出:export 分为两种形式自定义和默认 可以导出对象,函数,类,字符串
 默认内容:export default 不需要加任何修饰,导入时名字任取
在这里插入图片描述
 自定义内容:export 导出的内容需要加{},导入时名字需要对应
在这里插入图片描述
导入:导入指定文件中的指定内容(路径可以是相对路径、绝对路径、网络路径)
  import 名称 from 文件地址
  导入时,指定内容如果是*号,则表示引入指定路径下的所有内容
  import 拥有提前量(自动提升到顶层执行)
在这里插入图片描述在这里插入图片描述
重命名
 as 关键字 XX as xxx
 将左侧的名字改为右侧的
 在当前文件夹中,名字依旧为左侧
 在外部文件导入时,才使用右侧的名字
 导入时,依旧可以使用as进行重命名

Promise对象

 同步和异步是一种消息通知机制
 同步消息阻塞:A调用B,B处理获得结果,才会返回给A,A在这个过程中,一直在等待B的处理结果,没有拿到结果之前,需要A一致等待,直到拿到结果,然后才继续往下执行
 异步非阻塞:A调用B,无需等待B的结果,继续运行下一步,B通过状态,通知,回调等方式在完成后,通知A
 异步: 事件;定时器;网络请求

promise不解决异步问题,解决的是异步的写法
创建:let p = new Promise(回调函数)
   在pormise对象创建时,这个函数执行,函数内this指向window
回调函数中会有两个参数,我们一般用resolve和reject来命名接收
 resolve(传递给执行成功后触发的函数 参数) 执行成功
 reject(传递给执行失败后触发的函数 参数) 执行失败
p会返回一个对象,其中有一个then方法,then方法会在异步处理结束后执行
pending 内部状态,异步执行中
执行结束后:Fulfillen(标准)Resolved 执行成功,调用resolve改变
Rejected执行失败,调用reject之后改变
 自带两个参数:resolve,reject(两个方法)调用这两个方法时,表示异步已经执行结束
then方法会给我们返回一个新的Promise对象
新对象的执行状态
1.返回一个状态为resolve的Promise对象
2.当then的回调函数返回的是一个非Promise对象,then返回的是一个状态为resolve的Promise对象
3.当then返回一个Promise对象时,then返回值也会变成该Promise对象
在这里插入图片描述在这里插入图片描述在这里插入图片描述在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值