手机版

谈JavaScript中的对象和Promise对象的实现

时间:2021-09-22 来源:互联网 编辑:宝哥软件园 浏览:

JavaScript中的一切都是一个对象:字符串、数值、数组、函数。让我们收集和整理一些javascript中的对象以及promise对象的实现。详情如下:

到处都是物体。

窗口对象

的常见性质和方法介绍。

位置

包含页面的网址。如果此属性被更改,浏览器将访问新的网址。

状态

包含要在浏览器状态下显示的字符串。一般在浏览器的左下角。

加载:

包含页面完全加载后需要调用的函数。

文档:

包括DOM。

警报方法:

显示提醒。

提示方法:

类似于alert,但它从用户那里获取信息。

打开

打开一个新窗口。

关闭

关闭窗口

设置超时:

在指定的时间间隔后调用处理程序。

setlnterval

以指定的时间间隔重复调用处理函数。

谈论窗口。加载

通过为window的onload属性分配一个函数,可以确保代码在页面加载和DOM完全建立之前不会运行。

用于更改DOM的函数。

窗户。onload=function(){//code here }//function是匿名函数,分配给onload。我们不说window.inload=init()的原因是,我们不是在调用函数,而是在使用它的值。

将函数值赋给window对象的inload属性,并让它在页面加载后执行。

有两种方法可以创建window.onload处理程序——使用函数名和匿名函数。

这两种方法基本上做同样的事情,但是如果分配给window.onload的函数要在其他地方使用,选择使用函数名。

文档对象

的常见性质和方法介绍。

域:

提供文档的服务器的域,如kelion.com。

标题:

使用document.title,您可以获得文档的标题。

网址:

文档的网址。

GetElementById方法:

根据元素id获取这个元素。

getElementsByTagName,

getElementsByClassName:

这两种方法与前一种类似,只是它们使用标记和类来获取元素。

createElement:

创建适合包含在DOM中的新元素。

谈论创建元素

//创建li元素,var Li=document . create element(' Li ');//为新创建的元素分配li.innerHTML=' songName//获取ul元素var ul=document . getelementbyid(' playlist ')//将li元素添加到ul.appendChild(li)注意:在第八行代码之前,li元素始终独立于DOM。

元素对象

常见属性和方法介绍:

innerHTML:

包含元素的内容。

childElementCount:

保存的元素数量。

第一个孩子

第一个子元素。

AppendChild方法:

InsertBefore方法:

用于将元素作为元素的子元素插入。

GetAttribute方法setAttribute方法。

用户以两种方式设置和获取元素中的属性:如“src”、“id”、“class”等。

最后,看一下按钮对象。

按钮对象有一个常用属性:

Onclick(用于监控按钮是否被按下)。

var Button=document . getelementbyid(' Button ');//button只是一个变量名,可以是button1、button2等等,但本质是一个按钮。onclick=handlebuttonclick

Ps:关于Javascript中Promise对象的实现。

很多前端朋友应该听说过Promise(或delivered)对象。今天我将谈谈我对诺言的理解。

什么事?

承诺是CommonJS的规范之一,它有解决、拒绝、完成、失败、然后等方法。它可以帮助我们控制代码流,避免函数的多层嵌套。如今,异步在web开发中变得越来越重要。对于开发人员来说,这种具有非线性执行的编程会让开发人员难以控制,而Promise可以让我们更好地控制代码的执行流程。流行的js库如jQuery已经实现了这个对象,年底发布的ES6也将本机实现Promise。

为什么

想象一个场景,两个异步请求,第二个请求需要第一个请求的成功数据,所以我们的代码可以这样写。

ajax({ url: url1,success:函数(数据){ ajax({ url: url2,data:数据,success:函数(){ } });} });如果继续做回调函数的下一步,嵌套的图层会越来越多。我们可以做适当的改进,把回调函数写在外面。

函数A() { ajax({ url: url1,success:函数(数据){ B(数据);} });}函数B(数据){ ajax({ url: url2,success:函数(数据)}.} });}即使这样重写,代码也不够直观,但如果有Promise对象,代码就可以写得很清楚,一目了然。请看看。

新承诺(一)。完成(乙);

这样,函数B就不必写在a的回调中了。

怎么

目前ES标准不支持Promise对象,还是自己动手,丰衣足食吧。总体思路如下:用两个数组(doneList和failList)分别存储成功时回调函数队列和失败时回调队列的当前执行状态* state:有三个值:待定、已解决和已拒绝3 * done:向doneList添加成功的回调函数* fail:向failList添加失败的回调函数*然后:分别向doneList和failList添加回调函数*。Always:添加了一个回调函数,无论成功或失败都会调用该函数。* resolve:将状态更改为已解决,并触发所有成功绑定的回调函数。* reject:将状态更改为已拒绝,并触发绑定的所有失败回调函数。* when:参数是多个异步或延迟函数。返回值是承诺兑现。当所有函数成功执行时,执行对象的解析方法,否则,执行对象的拒绝方法。

以下是我的具体实施过程:

var Promise=function(){ this . donelist=[];this . fail list=[];this.state=“挂起”;};Promise . prototype={ constructor : ' Promise ',resolve : function(){ this . state=' resolved ';var list=this.doneListfor(var i=0,len=list.length我透镜;i ) {列表[0]。叫(这个);list . shift();} },reject : function(){ this . state=' rejected ';var list=this.failListfor(var i=0,len=list.length我透镜;i ){列表[0]。叫(这个);list . shift();} },done:函数(func){ if(type of func==' func '){ this . donelist . push(func);}退回这个;},fail:函数(func){ if(type of func==' func '){ this . fail list . push(func);}退回这个;},然后是:函数(doneFn,failFn) { this.done(doneFn)。失败(FailFn);归还这个;},always:函数(fn) { this.done(fn)。失败(fn);归还这个;}};函数when(){ var p=new Promise();var success=truevar len=arguments.lengthfor(var I=0;我透镜;i ) { if(!(参数[i] instanceof Promise)) {返回false} else { arguments[i]。总是(function() { if(this.state!=' resolved '){ success=false;} len-;if(len==0) { success?p . resolve(): p . reject();} });} }返回p;}提升目前只实现了Promise的基本功能,但还存在一些无法处理的问题。例如,要实现三个或更多异步请求的序列化,我的Promise不能支持新Promise(A)的形式。然后(乙)。然后(C)目前。JQuery在1.7版本中实现了延迟(Promise)对象的管道函数。代码是$。延期(A)。管道(B)。然后(C)。我试着去读jQuery的代码,但是我看不懂。希望有大神能给出一些实施的思路。

版权声明:谈JavaScript中的对象和Promise对象的实现是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。