原生JS模拟Promise实现详解

JavaScript013

原生JS模拟Promise实现详解,第1张

作为一名程序猿,经常遇到回调函数的情况,原生js的回调函数是一层一层的嵌套调用,而es6提供了一种新的写法,Promise,它可以把原本的嵌套回调函数实现成横向的调用,即链式调用。

下面看一个Promise的简单用法:

接着开始模拟:

首先,_Promise构造函数会接收一个函数resolver并执行,函数中又包含resolve和reject两个参数,然后,_Promise构造函数生成的实例有三种状态,分别是pending(初始值)、fullfilled(成功)和rejected(失败),且由pending变为成功或者失败后状态不可逆。

resolve和reject函数执行的时候会先判断状态,如果是pending则执行,且将状态变为fullfilled或者rejected,并将resolve/reject函数中参数传递给_result,以便then函数调用时使用。

因为有可能存在链式调用,所以执行then函数的返回值需要判断,如果isResolve或者isReject函数返回的是一个新的_Promise实例,则返回这个实例,否则返回当前实例

至此,Promise已经模拟完成~

原生键盘监听事件:按下一次按键,分为三个过程,按下—按住—松开

onkeydown:某个键被按下

onkeypress:某个键盘的键被按下或按住

onkeyup:某个键盘的键被松开

使用方法,一般来说,键盘监听是直接在整个页面文档上进行监听的,也就是document上

以下是原生的使用案例

//实际使用

document.onkeydown=function(e){ //对整个页面文档监听

var keyNum=window.event ? e.keyCode :e.which //获取被按下的键值

//判断如果用户按下了回车键(keycody=13)

if(keyNum==13){

alert('您按下了回车')

}

//判断如果用户按下了空格键(keycode=32),

if(keyNum==32){

alert('您按下了空格')

}

}

剩下另外两个按键方法同理

jquery的方式监听键盘事件

jquery的也分为三个过程,但是在事件名称上有所不同

keyup:某个键盘的键被松开

keydown:某个键被按下

keypress:某个键盘的键被按下或按住

JS里添加样式的方法:

1、首先,要创建标签,使用document.createElement函数,如图创建div标签。使用其className设置class,id设置id,style设置样式。

2、样式的设置也可以分项进行。如图是分项设置其left,top,display,position,width几个样式。

3、通过设置标签的innerHTML属性可以直接给其添加子标签以及子标签的样式。当然,也可以分项分层添加标签。

4、设置好标签(如图是div标签,变量名box),使用document.body.appendChild添加标签到body当中。

5、标签添加以后,依然可以修改样式,如图是使用document.getElementById方法根据id获取标签,修改style。

6、标签添加以后,也可以给其添加和删除event处理。如图是使用jQuery给id为img-preview-box的标签添加hover鼠标经过的处理。