相信jser兄弟們確定會碰到這樣一個問題,數組
在作數組類的操做的時候,會要求刪除數組中的一個元素;亦或是判斷某值是否存在於這個數組;this
OK,拿刪除數組元素舉例,擴展方法爲:prototype
Array.prototype.remove = function(val){ var index = this.indexOf(val); if (index > -1) { this.splice(index, 1); } }
很簡單了擴展了一個刪除元素的方法,那麼我說的坑是什麼呢?orm
在咱們使用for··in 遍歷對象的時候是把對象的可枚舉屬性都遍歷了,!!!包括其原型鏈上的東東(坑!),下面看圖說話:對象
一張圖說明一切了對麼?你之後每次使用for···in···進行遍歷的時候都會保函在這裏所擴展的remove方法,那麼解決方案呢?原型鏈
判斷是不是它私有屬性,若是不是就說明不是本身「親生的」,直接break扔掉;rem
------------------------------------------------------------------------------------------字符串
以上狀況常常出如今字符串模板裏面,就是給String擴展一個format方法,以下原型
String.prototype.format = function(args) { var result = this; if (arguments.length < 1) { return result; } var data = arguments; // 若是模板參數是數組 if (arguments.length == 1 && typeof (args) == "object") { // 若是模板參數是對象 data = args; } for ( var key in data) { if(!data.hasOwnProperty(key))break; var value = data[key]; if (undefined != value) { result = result.replaceAll("\\{" + key + "\\}", value); } } return result; }
若是沒有作處理的話,偶爾碰到莫名其妙的undefined會有點摸不着頭腦~~~io