Показать сообщение отдельно
  #26 (permalink)  
Старый 02.10.2010, 17:11
Интересующийся
Отправить личное сообщение для cainrus Посмотреть профиль Найти все сообщения от cainrus
 
Регистрация: 30.09.2010
Сообщений: 13

Да, я обнаружил что мой код не работает правильно, когда посмотрел метод 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..


Перепишу фишку, используя первоначальный способ с циклом, раз нет других способов
Ответить с цитированием