2009-10-18 78 views
1

我試圖走出這個jQuery插件http://plugins.jquery.com/project/stylish-select-box/的Jquery +原型noConflict()模式,打破Array.prototype.indexOf

它的作品不錯,但與原型+的jQuery在noConflict模式 這一功能打破了別人的腳本

Array.prototype.indexOf = function (obj, start) { 
     for (var i = (start || 0); i < this.length; i++) { 
      if (this[i] == obj) { 
       return i; 
      } 
     } 
    }; 

有幫助嗎?

+0

數組已經有indexOf方法嗎?你爲什麼要嘗試更換它?很多腳本都將依賴於預期的行爲 – 2009-10-18 15:48:10

回答

1

https://developer.mozilla.org/en/Core_JavaScript_1.5_Reference/Global_Objects/Array/indexOf

陣列已經有一個本地的indexOf方法。以不產生相同結果的方式改變它將會破壞事物。哎呀,甚至試圖替換本地方法可能會導致像hasOwnProperty方法的問題。

如果您確實需要該功能,請將其重命名爲myIndexOf或其他內容以避免衝突。

+0

非常感謝! – Davide 2009-10-18 16:22:19

+0

不用擔心。樂於幫助。 – 2009-10-18 22:12:17

+0

我認爲定義'Array.prototype.indexOf'的目的是爲了確保跨瀏覽器的支持;一些舊版瀏覽器不支持它。也就是說,應該只在非本地時才被定義,並且應該被定義爲正確實現規範。關於'hasOwnProperty',這實際上是一種防範這種猴子補丁的措施,只有當你直接改變Object.prototype時纔有必要。 – eyelidlessness 2011-01-05 04:19:07

0

1.6之前的Javascript版本不實現indexOf(即IE6)。但是,您可以輕鬆查看indexOf是否已實現:

if (!Array.prototype.indexOf) 
{ 
    Array.prototype.indexOf = function(obj, start) { 
     // 
    } 
}