亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

淺談JavaScript中的對象及Promise對象的實現

2019-11-20 11:16:19
字體:
來源:轉載
供稿:網友

JavaScript 中的所有事物都是對象:字符串、數值、數組、函數。下面小編給大家收集整理些javascript中的對象及promise對象的實現。具體內容如下:

到處都是對象

window對象

常用的屬性和方法介紹

location

  包含頁面的URL,如果改變這個屬性,瀏覽器會訪問新的URL

status

  包含將在瀏覽器狀態去顯示的一個串。一般在瀏覽器左下角

onload:

  包含了需要在頁面完全加載后調用的函數

document:

  包含DOM

alert方法:

  顯示一個提醒

prompt方法:

  類似于alert,不過會從用戶那得到信息

open

  打開一個新窗口

close

  關閉窗口

setTimeout:

  指定的時間間隔后調用一個處理函數

setlnterval

  以一個指定的時間間隔反復調用一個處理函數

談談window.onload

 通過向window的onload屬性指定一個函數,可以確保在頁面加載和DOM完全建立之前不會運行代碼。

 用于改變DOM的函數

 window.onload = function(){   //code here  } //function是一個匿名函數,賦給onload

我們之所以不說window.inload = init(),是因為我們不是調用函數,而是要使用它的值。

 將一個函數的值賦給window對象的inload屬性,讓它在頁面加載完后,執行。

 創建window.onload處理程序有兩種方法-----使用函數名和使用匿名函數。

 這兩種方法基本上都會做同一件事,但如果賦給window.onload的函數還要在別處使用,則選擇使用函數名

document對象

常用的屬性和方法介紹

domain:

  提供文檔的服務器的域,如kelion.com.

title:

  通過document.title,可以獲得文檔的標題

URL:

  文檔的URL

getElementById方法:

  根據元素id獲取這個元素

getElementsByTagName,

getElementsByClassName:

  這兩個方法類似前一個,只不過他們使用標記和類來獲取元素

createElement:

  創建適合包含在DOM中的新的元素

談談createElement

 //創建<li>元素, var li = document.createElement("li");  //給剛創建的元素賦值 li.innerHTML = "songName"; //獲取<ul>元素 var ul = document.getElementById("playlist") //把<li>元素增加到ul中 ul.appendChild(li)

注:在進行第8行代碼前,li元素始終都是獨立于DOM之外的

元素對象

常用的屬性和方法介紹:

innerHTML:

  包含元素的內容

childElementCount:

  保存元素的個數

firstChild

  第一個子元素

appendChild方法:

insertBefore方法:

  用于插入元素,作為一個元素的子元素

getAttribute方法
setAttribute方法

  使用者兩個方法來設置和獲取元素中的屬性:如“src”,“id”,“class”等

最后來了解下button對象

button對象有一個經常用的屬性:

    onclick(用于監聽一個按鈕是否被按下了)?!?/p>

var button = document.getElementById("Button"); //button只是一個變量名,可以是button1,button2等等,但本質是一個按鈕
 button.onclick = handleButtonClick;

 ps:淺談Javascript中Promise對象的實現

 很多做前端的朋友應該都聽說過Promise(或者Deferred)對象,今天我就講一下我對Promise的認識

What?

Promise是CommonJS的規范之一,擁有resolve、reject、done、fail、then等方法,能夠幫助我們控制代碼的流程,避免函數的多層嵌套。如今異步在web開發中越來越重要,對于開發人員來說,這種非線性執行的編程會讓開發者覺得難以掌控,而Promise可以讓我們更好地掌控代碼的執行流程,jQuery等流行的js庫都已經實現了這個對象,年底即將發布的ES6也將原生實現Promise

Why

想象這樣一個場景,兩個異步請求,第二個需要用到第一個請求成功的數據,那么我們代碼可以這樣寫

  ajax({    url: url1,    success: function(data) {      ajax({        url: url2,        data: data,        success: function() {        }      });    }  });

如果繼續下去在回調函數中進行下一步操作,嵌套的層數會越來越多。我們可以進行適當的改進,把回調函數寫到外面

 function A() {    ajax({      url: url1,      success: function(data) {        B(data);      }    });  }  function B(data) {    ajax({      url: url2,      success: function(data) {        ......      }    });  }

即使是改寫成這樣,代碼還是不夠直觀,但是如果有了Promise對象,代碼就可以寫得非常清晰,一目了然,請看

new Promise(A).done(B);

這樣函數B就不用寫在A的回調中了

How

目前的ES標準中還未支持Promise對象,那么我們就自己動手,豐衣足食吧。思路大致是這樣的,用2個數組(doneList和failList)分別存儲成功時的回調函數隊列和失敗時的回調隊列
* state: 當前執行狀態,有pending、resolved、rejected3種取值
* done: 向doneList中添加一個成功回調函數
* fail: 向failList中添加一個失敗回調函數
* then: 分別向doneList和failList中添加回調函數
* always: 添加一個無論成功還是失敗都會調用的回調函數
* resolve: 將狀態更改為resolved,并觸發綁定的所有成功的回調函數
* reject: 將狀態更改為rejected,并觸發綁定的所有失敗的回調函數
* when: 參數是多個異步或者延遲函數,返回值是一個Promise兌現,當所有函數都執行成功的時候執行該對象的resolve方法,反之執行該對象的reject方法

下面是我的具體實現過程:

var Promise = function() {  this.doneList = [];  this.failList = [];  this.state = 'pending';};Promise.prototype = {  constructor: 'Promise',  resolve: function() {    this.state = 'resolved';    var list = this.doneList;    for(var i = 0, len = list.length; i < len; i++) {      list[0].call(this);      list.shift();    }  },  reject: function() {    this.state = 'rejected';    var list = this.failList;    for(var i = 0, len = list.length; i < len; i++){      list[0].call(this);      list.shift();    }  },  done: function(func) {    if(typeof func === 'function') {      this.doneList.push(func);    }    return this;  },  fail: function(func) {    if(typeof func === 'function') {      this.failList.push(func);    }    return this;  },  then: function(doneFn, failFn) {    this.done(doneFn).fail(failFn);    return this;  },  always: function(fn) {    this.done(fn).fail(fn);    return this;  }};function when() {  var p = new Promise();  var success = true;  var len = arguments.length;  for(var i = 0; i < len; i++) {    if(!(arguments[i] instanceof Promise)) {      return false;    }    else {      arguments[i].always(function() {        if(this.state != 'resolved'){          success = false;        }        len--;        if(len == 0) {          success ? p.resolve() : p.reject();        }      });    }  }  return p;}Improve

目前只是實現了Promise的基礎功能,但仍然還有無法處理的情況,例如要實現3個或3個以上的異步請求的串行,目前我的Promise沒有辦法支持new Promise(A).then(B).then(C)這樣的形式,jQuery在1.7的版本中為Deferred(Promise)對象實現了pipe函數,可以通過這個函數實現上述功能,代碼為$.Deferred(A).pipe(B).then(C),我嘗試去讀了jQuery這部分的代碼,但是沒能讀懂,希望有大神能夠給一些實現思路

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久久精品2019中文字幕神马| 日韩一二三在线视频播| 国产精品久久久久国产a级| 九九久久综合网站| 岛国av一区二区三区| 欧美日韩综合视频| 欧美精品激情在线观看| 久久视频这里只有精品| 欧美日本国产在线| 欧美成人精品三级在线观看| 成人有码在线视频| 亚洲视频777| 国产精品久久久久久中文字| 国产在线视频不卡| 国产视频在线一区二区| 日韩电影中文字幕在线观看| 国产精品丝袜视频| 精品成人乱色一区二区| 日韩美女av在线免费观看| 久久久91精品| 国产成人涩涩涩视频在线观看| 国产亚洲精品成人av久久ww| 国产成人在线亚洲欧美| 亚洲综合日韩在线| 欧美理论电影在线播放| 中国china体内裑精亚洲片| 亚洲综合av影视| 欧美激情一级精品国产| 亚洲国产又黄又爽女人高潮的| 国产精品美女久久| 久久噜噜噜精品国产亚洲综合| 亚洲综合在线中文字幕| 亚洲精品一区在线观看香蕉| 狠狠做深爱婷婷久久综合一区| 国产精品美女免费| 久久影院中文字幕| 精品久久久久久中文字幕一区奶水| 国内精品久久久久久久| 国产精品久久久久久久午夜| 久久久久女教师免费一区| 欧美人在线观看| 精品偷拍各种wc美女嘘嘘| 国产亚洲福利一区| 欧美日韩国产二区| 精品久久久久久中文字幕大豆网| 欧美日韩视频免费播放| 亚洲第一视频在线观看| 日韩一区在线视频| 久久韩国免费视频| 久久综合伊人77777蜜臀| 日韩精品中文字幕视频在线| 国产精品视频区| 亚洲激情视频网站| 黄色成人av在线| 7m第一福利500精品视频| 国产一区二区三区在线| 91国偷自产一区二区三区的观看方式| 性色av一区二区三区免费| 亚洲成人激情在线观看| 国产亚洲精品久久久久久牛牛| 国产亚洲美女久久| 激情成人在线视频| 清纯唯美日韩制服另类| 亚洲女人初尝黑人巨大| 久久精品欧美视频| 国产偷国产偷亚洲清高网站| 欧美性xxxxhd| 日韩欧美亚洲成人| 日韩在线观看高清| 亚洲国产精品久久久久秋霞不卡| 国产精品久久久久久久久久| 欧美国产在线电影| 国产精品久久久久久久久影视| 97国产精品久久| 国内精品久久久久久久| 欧美日韩在线视频首页| 清纯唯美亚洲激情| 丝袜一区二区三区| 国产精品久久久久高潮| 欧美日韩在线影院| 成人午夜激情网| 久久久久久国产精品美女| 国产一区二区三区视频| 国产成人精品国内自产拍免费看| 911国产网站尤物在线观看| 97视频在线免费观看| 国产日韩欧美综合| 午夜免费在线观看精品视频| 亚洲天堂久久av| 视频在线观看一区二区| 成人久久久久久久| 国外成人在线播放| 色婷婷综合久久久久| 国产精品国产三级国产专播精品人| 91久久久亚洲精品| 韩国福利视频一区| 亚洲男人天堂久| 亚洲视频免费一区| 日韩精品视频免费专区在线播放| 91精品视频在线看| 最好看的2019的中文字幕视频| 精品日韩美女的视频高清| 亚洲精选在线观看| 欧美美女15p| 亚洲色图第一页| 国内精品久久久久久影视8| 777午夜精品福利在线观看| 亚洲欧美日本另类| 国产成人精品在线观看| 亚洲第一精品电影| 亚洲欧洲国产伦综合| 在线成人一区二区| 夜夜嗨av色一区二区不卡| 黄色成人在线免费| 日韩av一区在线| 国产精品老牛影院在线观看| 色哟哟入口国产精品| 日本亚洲欧洲色| 国产精品美女久久久久久免费| 国产精品久久久久久久久久三级| 亚洲成人av在线| 亚洲成人黄色在线观看| 亚洲视频国产视频| 一区二区欧美亚洲| 中文字幕亚洲欧美一区二区三区| 欧美在线激情视频| 欧美日韩国产一区中文午夜| 992tv成人免费视频| 国产欧美日韩高清| 亚洲春色另类小说| 日韩在线中文字幕| 国产亚洲视频在线观看| 色婷婷综合久久久久中文字幕1| 日韩美女主播视频| 亚洲欧美日韩天堂一区二区| 亚洲第一页中文字幕| 欧美专区国产专区| 亚洲精品美女在线| 日韩精品电影网| 精品视频中文字幕| 亚洲精品国产成人| 日韩精品一区二区视频| 日本高清久久天堂| 日韩综合中文字幕| 在线亚洲欧美视频| 久久久免费在线观看| 国语自产精品视频在线看一大j8| 一区二区三区国产在线观看| 欧美极品美女视频网站在线观看免费| 91人人爽人人爽人人精88v| 欧美激情久久久久| 国产福利精品视频| 精品少妇一区二区30p| 精品国产欧美一区二区五十路| 欧美在线观看网站| 久久精品国产综合| 亚洲一区二区中文| 国产91精品黑色丝袜高跟鞋| 亚洲国产精品久久精品怡红院| 日韩精品视频免费| 日韩成人激情在线| 亚洲精品欧美一区二区三区| 欧美性猛交xxxxx免费看| 精品高清美女精品国产区|