Показать сообщение отдельно
Старый 13.08.2012, 02:11
Wolsh вне форума Посмотреть профиль Отправить личное сообщение для Wolsh Найти все сообщения от Wolsh
  № 2  
Ответить с цитированием
Wolsh
Нуб нубам
 
Аватар для Wolsh

модератор форума
Регистрация: Jan 2006
Адрес: Бердск, НСО
Сообщений: 6,445
Цитата:
Появилась необходимость в сравнении 2 объектов на полную идентичность
1 это не объект. Это же простой тип, он передается по значению, а не по ссылке.
Другими словами, Вы хотите сравнивать переменные, то есть ссылки. Но Ваша функция не получает ссылок. Она получает просто значения — единички. И эти значения никак не могут быть неравны.

Добавлено через 12 минут
Не говоря уже о том, что prop в obj3 вовсе не собирается хранить ссылку на obj1 и его prop, а просто сохраняет значение:
Код AS3:
var obj1:Object = { prop: 1 };
var obj2:Object = { prop: 1 };
var obj3:Object = { prop: obj1.prop };
obj1.prop = 5;
trace(obj3.prop); // output: 1
Добавлено через 17 минут
Решение для первого случая — передавать ссылки на объекты и строковые имена ключей. В функции сравнивать И объекты, и значения ключей
Код AS3:
function checkObjectsIdentity(object1:*, propName1:String, object2:*, propName2:String):Boolean
{
	// Тут происходит магия
	return object1 === object2 && object1[propName1] === object2[propName2];
}
Но для второго случая true не будет из-за неравенства объектов.

Добавлено через 23 минуты
Да и в первом случае все не так гладко)) Мы получим true при таком раскладе:
Код AS3:
var obj1:Object = { prop: 1, prop2: 1 };
// Тут функция должна возвращать false
checkObjectsIdentity(obj1, "prop", obj1, "prop2");
__________________
Reality.getBounds(this);


Последний раз редактировалось Wolsh; 13.08.2012 в 02:35.