function setName(obj) {
obj.names = 'Nicholas';
obj = new Object();
obj.xx ='Greg';
}
var person = new Object();
setName(person);
alert(person.names);
почуму остается доступным свойство names?Мы ведь его вроде должны удалить после obj = new Object();?
2.
<script>
function createPerson(name){
var localPerson = new Object();
localPerson.names = name;
return localPerson
}
createPerson('Nicholas');
alert(localPerson.names)//не работает
</script>
__________________
Я только учусь.Ногами просьба не бить
Последний раз редактировалось bot87, 14.05.2012 в 08:54.
Со вторым случаем все просто:
localPerson - локальная переменная, вы ее возвращаете, но нигде не используете, поэтому алерт и не работает. То есть, должно работать вот так:
function setName(obj) {
// здесь вы создаете новое свойство у объекта переданного через параметр
obj.names = 'Nicholas';
// здесь вы локально создаете новый объект
// тем самым ссылку на объект переданный аргументом, теряете
// но не заменяете объект тот что был передан аргументом
obj = new Object();
// задаете свойство новому локальному объекту
obj.xx ='Greg';
// при выходе из функции локальный объект будет уничтожен
}
В первом случае следствие из распространённого заблуждения, что объекты в JS передаются по ссылке. На самом деле, передаётся ссылка на объект, ссылка передаётся по значению, что не то же самое, что передача по ссылке.