[前端笔记015]JavaScript之严格模式、类、原型对象、旧类、new、对象分类

资源

严格模式

  • 代码运行模式:正常模式,语法检查不严格,能不报错就不报错;
  • 严格报错,语法检查变得严格;禁止一些语法;更容易报错;在需要开严格模式的作用域的代码开头写,“use strict”
  • 开发中尽量使用严格模式

  • 使用object创建对象的问题,无法批量创建,无法区分不同类型
  • 类是对象模板,由类来创建对象
  • 语法 class 类名 {} 或者 const 类名=class {};创建对象的方法,new 类名(),实质是调用构造函数。
  • 类的代码块 ,默认严格模式,类中不能直接写代码
  • 类中可直接定义实例属性,在创建实例时直接成为实例的属性,通过实例来访问,属性名=属性值
  • 类中使用,static 属性名=属性值,定义静态属性,也叫类属性,静态属性智能通过类访问,实例无法访问
  • 使用 函数名(){}的方法添加实例方法,实例方法中的this就是当前实例
  • 使用 static 函数名(){}的方法添加静态方法,静态方法中的this就是当前类
  • 简单说,谁调用this指向谁
  • 构造函数 constructor(){},固定写法
  • 封装,装指对象是存储不同属性的容器,封是指,对象还负责数据安全。
  • 私有属性,只有类内可以访问,方式 #属性名; ,然后使用getter和setter方法来操作属性,get 属性名(){return this.#属性名 };set 属性名(参数){this.#属性名 =xxx,可以加判断};这样当使用 实例.属性名 时,看起来是直接调用和修改,但实际是调用了相应的get set方法
  • 多态,在JS中不会检查参数的类型,所以任意数据都可以作为参数传递,天生具有多态性,但有时太过了,需要加判断进行限制。多态指调用某个函数时,无须指定的类型,只需要对象满足某些条件即可。增加了代码复用性。
  • 继承,使用extends;有继承那就有重写函数;重写构造函数时,构造函数的第一行必须为super(),表示调用父类构造函数,该传参也要传参;在方法中可以使用super来引用父类的方法
  • OCP开闭原则,对修改关闭,对扩展开放
  • 对象存储属性的位置:1.对象自身,直接通过对象添加的属性,obj.xxx=xxx,以及在类中使用x=y的形式添加的属性;2.原型对象,还有一些内容,如xxx(){}和主动向原型中添加的属性或方法,存储在其他的对象,也就是原型(prototype)对象中,在对象的__proto__属性中存储原型对象的地址
  • 访问属性时,先在自身中找, 没有时再去原型对象中找再没有就去原型链中找,找不到返回undefined;作用域链是找变量,找不到会报错

原型对象

  • 访问原型方式,使用对象.__proto__(不推荐)或者Object.getPrototypeOf(对象)
  • 原型对象中的数据有,1.对象中的属性和方法,2.constructor(对象的构造函数)
  • 原型对象也有原型,所以就会出现原型链,原型链的末尾是null,结尾上一个原型是Object的原型。
  • 同类型对象的原型同一个对象,可以用===判断
  • 提高复用性,减少内存使用
  • 继承是通过原型来实现的,当继承时,子类的原型就是父类的实例
  • 原型链例子:cat->animal->object->objcet原型->null
  • 修改原型,1是通过对象.__proto__(强烈不推荐)修改,2是通过类的prototype来访问,类.prototype。会修改所有实例的原型。原型尽量不要改,改了通过第二种改,而且只修改prototype属性,不给prototype赋值。
  • 可以通过 对象名 instanceof 类名 来判断实例对象是否是某个类的实例,检查的是对象原型链上是否有该类实例
  • 使用in检查对象属性,无论属性在自身还是原型都返回true;可以使用对象.hasOwnProperty('属性名')来检查一个属性名是否在自身(不推荐);使用新的Objcet.hasOwn(对象,'属性名')来检查

旧类

  • 旧类指以前的方式创建的类,使用函数定义,function Person(){}+new Person()的方式来创建实例。
  • 使用函数创建的旧类,直接在函数体中对属性赋值,对于方法,使用类.prototype.函数名=function(){}添加
  • 添加静态属性和方法,类.staticPrototy=xxx``类.staticMethod=function(){}
  • 为避免分散,一般放在立即执行函数中,把函数返回函数对象赋值给一个变量;想要继承类,直接在令 子类.protoytpe=new 父类() 即可。
  • 认识即可,有新旧转换工具

new

  • 使用new调用函数时,这个函数将会被作为构造函数调用,会发生以下事情
    1. 创建一个空白普通的JS对象实例(Object对象 {})
    2. 将新实例的prototype属性指向构造函数的prototype属性
    3. 使用实参来执行构造函数,并且将新对象设置为函数中的this
    4. 如果构造函数返回的是非原始值,则该值会作为new运算的返回值返回
    5. 如果构造函数返回的是原始值或者没有指定返回值,则将新实例作为返回值
    6. 所以不给构造函数设置返回值

对象分类

  • 内建对象,由ES标准所定义的对象,如Object,Function,String…
  • 宿主对象 ,由浏览器提供的对象,如BOM\DOM
  • 自定义对象
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值