2014-04-21 80 views
-1

好吧,所以我用一個愚蠢的舉動阻止了自己,現在正在與我正在使用的jQuery庫產生衝突,而且我應該說,在完成閱讀之後,可能會突破更多。反正我嘗試使用以下位:不過如何在不使用原型的情況下獲得Object/Array .prototype的功能?

Array.prototype.contains = function(v) { 
    for(var i = 0; i < this.length; i++) { 
     if(this[i] === v) return true; 
    } 
    return false; 
}; 

Array.prototype.unique = function() { 
    var arr = []; 
    for(var i = 0; i < this.length; i++) { 
     if(!arr.contains(this[i])) { 
      arr.push(this[i]); 
     } 
    } 
    return arr; 
} 

要得到一個數組的獨特的價值觀,這最終導致我的原因jQuery的衝突爆發了很多東西,所以,我怎麼能得到解決使用原型的禁止但美味的想法?特別是在這種情況下,需要在數組中的唯一值?

+0

您可以使用Underscore等庫嗎? –

+1

這是一個更簡化的方法 - 爲什麼不只是將原型方法的名稱更改爲「hascontent」或「isunique」? –

+2

以什麼方式衝突?你有錯誤嗎?你有一個例子嗎? –

回答

1

避免本地類型的修改原型的常用方法是靜態方法:

Array.unique = function(entity) { 
    // do your stuff 
}; 

// example call 
var unique = Array.unique([1, 1, 2, 3]); 

或者,把它一步,即使這樣做

var Arrays = Arrays || {}; 
Arrays.unique = function(entity) { /* … */ }; 

這樣你完全與內置的Array分開。

+1

內置構造函數的「靜態」方法也可能與其他代碼發生衝突。 –

+0

@cookiemonster我加了一個小小的變化(我更喜歡)。 –

+1

使安全的唯一真正方法是在包含代碼其餘部分的函數中聲明它。如果它是全球性的,你可能會遇到同樣的問題。儘管我不知道OP在談論什麼衝突。 –

相關問題