事件的监听以及处理

事件

事件,是文档或浏览器窗口中发生的一些特定的交互瞬间。

下面分别介绍事件中的几个重要特性:

  • 事件流
  • 事件处理程序
  • 事件对象

一、事件流

事件流是用于描述页面接收事件的顺序。

 浏览器中的BOM对象

BOM

BOM 是指浏览器对象模型。

主要用于开发人员控制浏览器显示的界面以外的部分,例如浏览器窗口的位置、浏览器的地址信息、浏览历史界面的前进后退等。

一、window

window 对象是 BOM 的核心对象,表示浏览器的一个实例。

1.1 全局声明

window 既是访问浏览器窗口的接口,也是 ECMAScript 的全局对象(Global)。

 HTML中的DOM对象

DOM

DOM(文档对象模型)是针对 HTML 和 XML 文档的一个API。

  • 主流浏览器都完成了 DOM1 级的实现
  • IE 的 DOM 对象都是以 COM 对象的形式存在,和原始的 DOM 对象行为并不一致

一、节点层次

DOM 可以将 HTML 或 XML 文档描绘成一个由多层节点构成的结构,简单点说,就是一个树结构。

 对象变化侦测原理(三)

三、Array 数组侦测

数组 Array 虽然也是属于对象类型,但还是存在一些差别,它没办法像 Object 对象那样,通过 setter/getter 的方式来监听属性的变化,因此对于 Array 而言,需要用到另外一套变化侦测方案。

3.1 如何追踪变化

我们知道,Array 数组有很多个内置方法可以改变数组的值,比如 push,pop,shift等,这些方法都可以改变数组的内容,所以可以尝试通过监听这些方法的调用,来达到监听数组变化的目的。

但是,这些方法都是内置方法,而且 js 中并没有提供接口给我们覆盖,因此要如何修改这些方法,以达到我们需要的效果呢?

 对象变化侦测原理(二)

二、Object 变化侦测

变化侦测指的是,当运行时的状态发生变化时,应用程序可以知道哪个状态发生了变化,并作出相应的动作。

变化侦测的方式可以分为2种:一种是“推(push)”,一种是“拉(pull)”。

Vue 的变化侦测就属于“推,当状态发生变化时,它就会通知相应的依赖对象进行更新。

2.1 追踪变化

 对象变化侦测原理(一)

变化侦测原理

一、对象属性

对于 js 对象的属性,可以分为2种:数据属性和访问属性。

1.1 数据属性

数据属性就是普通的对象属性值,可以读入和写入值。

例如,下述的属性 data 就是数据属性:

1
2
3
4
var obj = {};
obj.data = 'data';

alert(obj.data) // "data"

对于数据属性,它有4个特性: