forEach()相容所有瀏覽器
ES5新增forEach方法,具體參閱JavaScript Array forEach()一章節。
但內建方法具有一定的瀏覽器相容性,下面就介紹一下如何實現相容性。
程式碼例項如下:
[JavaScript] 純文字檢視 複製程式碼執行程式碼if (typeof Array.prototype.forEach != "function") { Array.prototype.forEach = function (fn, context) { for (var k = 0, length = this.length; k < length; k++) { if (typeof fn === "function" && Object.prototype.hasOwnProperty.call(this, k)) { fn.call(context, this[k], k, this); } } }; } var func = function (value, index) { console.log(index + ":" + value); } var arr = ["螞蟻部落", "softwhy.com", "antzone", "青島市南區"]; arr.forEach(func);
上面的程式碼實現相容所有主流瀏覽器的功能,下面介紹一下它的實現過程。
一.程式碼註釋:
(1).if (typeof Array.prototype.forEach != "function") {},判斷當前瀏覽器是否支援forEach()方法。
(2).Array.prototype.forEach = function (fn, context) {},如果不支援,那麼就通過原型,為陣列新增一個forEach方法,第一個引數函式,第二個是fn函式的執行上下文物件。
(3).for (var k = 0, length = this.length; k < length; k++) {},遍歷陣列中的每一個元素。
(4).if (typeof fn === "function" && Object.prototype.hasOwnProperty.call(this, k)) ,判斷fn是否是一個函式,並且k是否是陣列的索引。下面再做進一步的說明:之所以使用Object.prototype.hasOwnProperty而不是Array.prototype.hasOwnProperty是因為後者被重寫的概率要遠高於前者,如果重寫了前者,那感覺此人腦子是鏽透了。之所以判斷k是否是陣列的索引是因為有些特殊情況,看如下程式碼例項:
[JavaScript] 純文字檢視 複製程式碼執行程式碼var arr = [1,,,,,,,2]; console.log(arr.length);
控制檯截圖如下:
儘管length值是8,但是其間的3-7的索引並沒有。
(5).fn.call(context, this[k], k, this),呼叫相應的函式並傳參。
二.相關閱讀:
(1).prototype參閱JavaScript prototype原型一章節。
(2).hasOwnProperty()參閱JavaScript hasOwnProperty()一章節。
(3).call()參閱JavaScript call()一章節。
相關文章
- 相容所有瀏覽器的placeholder效果瀏覽器
- 相容所有瀏覽器的getElementsByClassName()函式瀏覽器函式
- 相容所有瀏覽器array物件indexOf()方法瀏覽器物件Index
- 相容所有瀏覽器的圓角出效果瀏覽器
- 相容所有瀏覽器的陣列indexOf()方法瀏覽器陣列Index
- 相容所有瀏覽器的DOMContentLoaded事件瀏覽器事件
- 相容所有瀏覽器的對聯廣告程式碼瀏覽器
- 相容所有瀏覽器的阻止事件冒泡程式碼瀏覽器事件
- 相容所有瀏覽器的阻止事件冒泡封裝瀏覽器事件封裝
- 相容所有瀏覽器的progress程式碼例項瀏覽器
- 相容所有瀏覽器的圖片上傳本地預覽效果瀏覽器
- 滾動滑鼠縮放圖片相容所有瀏覽器瀏覽器
- 原生js如何建立相容所有瀏覽器的xmlhttp物件JS瀏覽器XMLHTTP物件
- js相容所有瀏覽器的事件繫結程式碼JS瀏覽器事件
- 相容所有瀏覽器的阻止事件冒泡js程式碼瀏覽器事件JS
- 相容所有瀏覽器的模糊效果程式碼例項瀏覽器
- IE瀏覽器相容瀏覽器
- parseInt()瀏覽器相容瀏覽器
- 9:瀏覽器相容瀏覽器
- 相容所有瀏覽器的點選複製黏貼效果瀏覽器
- 相容所有瀏覽器js設定元素透明度效果瀏覽器JS
- js相容所有瀏覽器的pageX和pageY屬性JS瀏覽器
- 相容所有瀏覽器的獲取事件源物件程式碼瀏覽器事件物件
- 相容所有瀏覽器的display:inline-block效果瀏覽器inlineBloC
- 相容所有瀏覽器的js滑鼠中鍵滾動事件瀏覽器JS事件
- 相容所有瀏覽器的密碼框輸入提示效果瀏覽器密碼
- 相容所有瀏覽器的nextSibling瀏覽器
- 關於瀏覽器相容瀏覽器
- 瀏覽器相容性瀏覽器
- CSShack瀏覽器相容一覽表CSS瀏覽器
- 相容所有瀏覽器長寬自適應元素垂直水平居中瀏覽器
- 相容所有瀏覽器的點選複製文字內容效果瀏覽器
- CSS瀏覽器相容彙總CSS瀏覽器
- Web前端瀏覽器相容初探Web前端瀏覽器
- 相容所有瀏覽器的禁止選中div文字程式碼例項瀏覽器
- js相容所有主流瀏覽器建立XMLhttpRequest物件例項程式碼JS瀏覽器XMLHTTP物件
- CSS實現的相容所有瀏覽器的背景漸變程式碼CSS瀏覽器
- edge瀏覽器相容性設定在哪 新版edge瀏覽器相容模式怎麼弄瀏覽器模式