2010-12-29 3 views

ответ

2

вопрос уже ответили, просто чтобы сделать его еще более ясным:

function myFunc(theObject) { 
     theObject = {make: "Ford", model: "Focus", year: 2006}; 
} 

нечто подобное (забудьте о синтаксисе, получите сообщение):

function myFunc(theObject) { 
     theObject = new TheObject("Ford","Focus",2006); 
} 

Другими словами, параметр ссылается, но вы меняете эту ссылку, создавая новый объект.

Примечание: поскольку синтаксис Java настолько популярен, я подумал о синтаксисе, подобном JAVA, чтобы объяснить с помощью дидактических целей, что вы создаете совершенно новый экземпляр. «TheObject» будет именем класса.

+0

почему 'TheObject' как новый? Что это делает? – DarkLightA

+0

'};' должно быть ');' кстати – NickAldwin

+0

исправлено, из-за быстрой записи –

0

Javascript изменяет локальную ссылку, а не исходную ссылку при внесении внесенных изменений. Это сообщение на SO должно помочь:

Is JavaScript a pass-by-reference or pass-by-value language?

+0

Зачем это произошло? Это неправильно? Это звучит так же, как и другие ответы. – adam0101

+0

Я тоже не уверен. Я думаю, что упоминание другого сообщения SO с некоторыми замечательными примерами и объяснением неприемлемо. –

9

Когда вы theObject = { ... } внутри myFunc, вы создаете новый объект и назначение его ссылку на локальную переменную theObject. Это не изменяет исходный объект.

Чтобы изменить содержимое исходного объекта, необходимо непосредственно изменять свои свойства, как это:

theObject.make = 'Ford'; 
theObject.model = 'Focus'; 
theObject.year = 2006; 
+0

Я этого не понимаю. Я думал, что 'theObject' в' myFunc' является ссылкой на объект, который был передан в 'myFunc', а не локальную переменную? –

+0

Это, но он назначает новый объект локальной переменной, не изменяя переданные свойства объекта. – kemiller2002

+1

@Tola Odejayi: 'theObject' сам по себе не является ссылкой на' mycar', он * содержит * ссылку на 'mycar'. Вы можете изменить 'mycar' через' theObject', но если вы назначите другой объект 'theObject', он теперь * держит * новую ссылку. – casablanca

0

Изменить это:

function myFunc(theObject) { 
     theObject = {make: "Ford", model: "Focus", year: 2006}; 
    } 

Здесь вы переназначение переменную на новый объект , Оригинал остается неизменным, потому что параметр не ссылается на переменную, удерживающую объект.

к:.

function myFunc(theObject) { 
    theObject.make = "Ford"; 
} 

Это изменяет свойства объекта вы прошли в

Смежные вопросы