type
status
date
slug
summary
tags
category
icon
password

事件流

事件捕获:
  • 从DOM的根元素开始去执行对应的事件(从外到里)
事件冒泡:
  • 当一个元素的事件被触发时,同样的事件将会在该元素的所有祖先元素中依次触发
  • 事件冒泡默认存在
  • 当一个元素触发事件之后,会依次向上调用所有父级元素的同名事件(比如说click)
阻止冒泡:
  • 因为默认有冒泡的存在,所以容易导致事件影响到父级;如果需要把事件限制在当前元素内就必须要阻止冒泡
  • 事件对象.stopPropagation()
    • 阻断事件流动传播,在冒泡和捕获阶段均有效
解绑事件:
  • 对象.onclick = null
    • 这样就把点击事件跟对象解绑了
  • 对象.removeEventListener(’事件’, 函数)
    • 该对象发生这个事件将不会执行这个函数

事件委托

运用事件流的特性来解决一些开发中的问题
  • 给父元素注册事件,当我们触发子元素的时候,会冒泡到父元素身上,从而触发父元素的事件
  • 给子元素注册事件,当父元素的事件触发时,也可以事件捕获到子元素身上
    • 可以用 事件对象.target.tagName 来获取真正触发事件的元素(比如li标签的这个属性就是大写的LI)

构造函数和this

接口

  • 多个名字一样的接口,实际上myInterface的属性有abc三个
  • 接口可以在定义类的时候限制类的结构
  • 接口只定义对象的结构而不考虑实际值

泛型

  • 这样定义就表示a的类型就是T的类型
  • 不指定泛型,TS可以自动对类型进行推断
    • 调用函数的时候,就可以判断出T的类型是number
    • 这样既不会关掉ts的类型检查,又可以传任意类型的参数
  • 指定泛型类型
  • 规定泛型的类型
    • 表示该泛型必须有length的属性

JS函数

setTimeout()和setInterval()的用法与区别

  • setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数
    • setTimeout() 方法用于在指定的毫秒数后调用函数或计算表达式,setTimeout() 只执行一次

      事件对象以及常见属性

      获取事件对象:
      • 事件绑定的回调函数的第一个参数就是事件对象 event
      常见属性:
      • type:当前事件的类型
      • key:用户按下键盘的值

      传统方法和静态方法

      在react里面写传统方法的话必须在JSX中声明:
      写静态方法的话直接调用就可以了,就不需要在JSX中进行声明,使用open直接就能打开一个对话框:
      open这个方法里面处理具体的事务

      JS 的垃圾回收机制

      可达性:
      • 某块内存不可达了就会被回收,js 引擎中有一个叫垃圾回收器的东西在后台执行,监控所有对象的状态,并删除掉那些不可达的对象
      • 如果一个值可以从根通过引用或者引用链进行访问,则认为该值是可达的
        • 此时全局变量 user 引用了对象 { name: “Jonh” }
        • 如果 user 的值被重写:user = null,这个引用就没了,对象不可达,垃圾回收器会认为该对象是垃圾数据并进行回收,然后释放内存
      无法到达的岛屿:
      • 几个对象相互引用,但外部没有对其任意对象的引用,这些对象也可能是不可达的,并被从内存中删除
        • notion image
      • "family" 对象已经不再与根相连,没有了外部对其的引用,所以它变成了一座“孤岛”,并且将被从内存中删除
      内部算法:
      • 垃圾回收的基本算法被称为 “mark-and-sweep”
      • 定期执行“垃圾回收”步骤:
        • 垃圾收集器找到所有的根,并对其进行标记
        • 遍历并标记来自根的所有引用
        • ……如此操作,直到所有可达的(从根部)引用都被访问到,没有被标记到的对象会被删除
      小结:
      • 垃圾回收是自动完成的,我们不能强制执行或是阻止执行
      • 当对象是可达状态时,它一定是存在于内存中的
      • 被引用与可访问(从一个根)不同:一组相互连接的对象可能整体都不可达,正如我们在上面的例子中看到的那样

      原型和原型链

      概念介绍:
      • 对象就是属性的集合,对象身上的方法实际上也是一个属性,但是值为一个函数
      • 每个对象从被创建开始就要和另一个对象关联,从另一个对象上继承其属性,这个另一个对象就是原型
      • 查找属性时,如果对象身上没有,就去它的原型找,原型没有就去原型的原型找…最后一直找不到才返回undefined
        • 这样由对象及其原型组成的链就叫作原型链
      • 构造函数用来创建对象,同一构造函数创建的对象原型相同
      小结:
      • 原型存在的意义就是组成原型链,引用类型都是对象,每个对象都有原型,原型也是对象和自己的原型,就这样一层一层组成原型链
      • 原型链存在的意义就是继承,访问对象属性时,在自己身上找不到,就在原型链上一层一层找
      • 继承存在的意义就是属性共享,代码重用+可扩展
      __proto__和prototype:
      • 对象有__proto__属性,函数有__proto__属性,数组也有__proto__属性,只要是引用类型,就有__proto__属性,指向其原型
      • 只有函数有prototype属性,只有函数有prototype属性,只有函数有prototype属性,指向new操作符加调用该函数创建的对象实例的原型对象
      constructor:
      构造函数都有一个prototype属性,指向使用这个构造函数创建的对象实例的原型对象
      创建一个原型方法:给构造函数的prototype添加一个属性:
      跟class对比:
      • Animal.call(this, name):让子类继承父类的实例属性
      • Dog.prototype = Object.create(Animal.prototype):让子类继承父类的原型方法
      • Dog.prototype.constructor = Dog:修复constructor指针
      用class来实现:
      前端开发杂记微信小程序:vue+uniapp
      • Giscus