Показать сообщение отдельно
  #3 (permalink)  
Старый 05.10.2012, 10:47
Аватар для Maxmaxmахimus
司会
Отправить личное сообщение для Maxmaxmахimus Посмотреть профиль Найти все сообщения от Maxmaxmахimus
 
Регистрация: 29.02.2012
Сообщений: 198

2 строчка че за херня?

а вообще Hoshinokoe правильный метод показал. потому что так obj.key мы делаем обращение к обьекту и спрашиваем у него key и он сам решает что ответить. А остальными способами мы не спрашивая обьект проверяем его внутреннее состояние, что иногда противоречит сути обьектов (инкапсуляции) КЭП. Иными словами получать знчаение которое дежит по ключу надо именно через аксессоры. а потом уже првоерять удовлетворяет тебя это значение или нет.

Но я написал которая определяет можно ли достучаться до конца цепочки и получить значение отличное от (неопределенного) undefined , функция возвращает true или false.


function has( context, patch ) {
	var keys = patch.split( '.' );

	for ( var i = 0; i < keys.length; i++ ) {
		try {
			var value = context[keys[i]];
		} catch ( e ) {
			return false
		}

		if ( value !== undefined )context = value;
		else return false;
	}

	return true;
}


а вот монада get которая возвращает то что на конце цепочки, если не может до туда достучаться возвращает undefined

function get( context, patch ) {
	var keys = patch.split( '.' );

	for ( var i = 0; i < keys.length; i++ ) {
		try {
			var value = context[keys[i]];
		} catch ( e ) {
			return
		}

		if ( value !== undefined )context = value;
		else return;
	}

	return context;
}


get
var obj = {a:{b:{c:{d:11}}}};

var value = get( obj, 'a.b.c.d' );
alert( value ); // 11

Последний раз редактировалось Maxmaxmахimus, 05.10.2012 в 11:20.
Ответить с цитированием