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,这个引用就没了,对象不可达,垃圾回收器会认为该对象是垃圾数据并进行回收,然后释放内存
无法到达的岛屿:
- 几个对象相互引用,但外部没有对其任意对象的引用,这些对象也可能是不可达的,并被从内存中删除

"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来实现:
- Author:orangec
- URL:orange’s blog | welcome to my blog (clovy.top)/article/108c107a-b41d-80e8-ace7-ccdbe0bfc1bb
- Copyright:All articles in this blog, except for special statements, adopt BY-NC-SA agreement. Please indicate the source!