Да, я обнаружил что мой код не работает правильно, когда посмотрел метод
toString(). Если есть два массива с одинаковым наполнением, то ключ хранения между ними будет общий, а если хранить объекты в массиве, тогда баг проявится при одинаковом количестве объектов в массиве.
// Extending Array Object
Array.prototype.key = (function(){
var storage = [];
return function(key){
if ( typeof(key) !== "undefined" ) {
// Add positive number or null, if key presents, and return self instance.
key = parseInt(key);
// If key is invalid or out of range, then it should be null.
if (key < 0 || key > this.length - 1 || isNaN(key)) key = null;
storage[this] = key;
return this;
} else {
// Return key
key = storage[this];
// If key is undefined, then it should be null.
if (typeof(key) === "undefined") key = null;
return key;
}
// Get value; if value is not defined, then set it to null.
if (typeof(value = storage[this]) === "undefined") value = null;
// Return index of array or null if array is empty
return value;
}
}());
// Let's test two new arrays
SomeArray = [1,2,3,4,5,6,7,8,9];
AnotherArray = ['a','b','c','d','e','f','g'];
BonusArray = ['a','b','c','d','e','f','g'];
// key method should return key index
alert('SomeArray key = '+SomeArray.key()); //null, there is no index yet
SomeArray.key(2); // set first array index to 2
AnotherArray.key(5); // set second array index to 5
alert('SomeArray key = '+SomeArray.key()); // 2 !
alert('AnotherArray key = '+AnotherArray.key()); // 5 !
alert('BonusArray key = '+BonusArray.key()); // 5 ! but it should not..
Перепишу фишку, используя первоначальный способ с циклом, раз нет других способов