赋值的话就更简单了,ifa.aaa = 0,就是把子窗口里面的window.aaa赋值为0了,子窗口里面的js直接用window.aaa就可以取得这个值,同理,iframe里面的js用parent.bbb = 1,就是把父窗口的window.bbb赋值为1了,父窗口就可以用window.bbb来取用这个值了。
作为一名程序猿,经常遇到回调函数的情况,原生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已经模拟完成~