2015-06-18 2 views
0

Учитывая код ниже, я создаю объект с именем foo, и я хочу сделать 'a' равным true из моей функции maketrue (obj).JS - передача по ссылке объекта

var foo = {a: false, b: false, c: false} 

function maketrue(obj) 
{ 
obj = true;  
} 

maketrue(foo.a); // I want to make 'a' true from the function 

console.log(foo.a); 

Зачем оно возвращает ложь?

Я рассмотрел похожие вопросы, которые работали с передачей объекта, но мой метод не проходит по ссылке.

+2

Вы не передавая объект, вы передаете 'false'. Javacript не имеет пропусков. – Bergi

+0

попробуйте передать 'foo' в качестве аргумента, затем установите' foo.a' значение true внутри функции. – muratgu

ответ

1

вы не передаете объект в качестве аргумента (который будет передан по ссылке), вы передаете только логическое значение свойство объекта (передать по значению).

Если вы хотите что-то, как это будет работать:

var foo = {a: false, b: false, c: false} 

function maketrue(obj, val) 
{ 
obj[val] = true;  
} 

maketrue(foo, 'a'); // I want to make 'a' true from the function 

console.log(foo.a); 
+1

Объекты не передаются по ссылке. Однако они содержат ссылки на их свойства. – Bergi

+0

Не путайте * pass - ** by ** - ссылка * с * прошел ** a ** ссылка *. Переменные хранят ссылки * на * объекты, и это те ссылки, которые передаются. Однако это не имеет никакого отношения к * pass-by-reference *, в котором описывается метод, как вызывающие передают значения вызываемым абонентам. См. Https://en.wikipedia.org/wiki/Evaluation_strategy для получения дополнительной информации. –

+0

Благодарим вас за дополнительное разъяснение. –

0

В JavaScript-объектах представлены как ссылки. foo.a не является объектом, однако, foo. Попробуйте это:

var foo = {a: false, b: false, c: false} 

function maketrue(obj) 
{ 
obj.a = true;  
} 

maketrue(foo); 

console.log(foo.a); 
+1

* «Объекты JavaScript передаются по ссылке». * № Объекты * представлены как * ссылки. Это не имеет никакого отношения к * pass - ** by ** - reference *. JavaScript строго передается по значению. См. Https://en.wikipedia.org/wiki/Evaluation_strategy для получения дополнительной информации. –

+0

Мой плохой, я изменил свой ответ соответствующим образом. Вот почему вы не можете переназначить объект непосредственно внутри функции, не так ли? – itd

+0

Да. Если JavaScript был передачей по ссылке, мы могли бы сделать что-то вроде 'var foo = 42; var bar = foo; bar = 21; 'и' foo' будет '21'. Это полностью не зависит от фактических значений. –

0

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

var foo = {a: false, b: false, c: false} 

function maketrue(obj) 
{ 
obj.a = true;  
} 

maketrue(foo); 

console.log(foo.a); 
0

Работа с объекта и Свойства в Javascript:

var foo = {a: false, b:false, c:false}  

/** 
* Way Object 
*/ 
function maketrue(obj) 
{ 
    obj.a = true; // Specific property 
} 
maketrue(foo); 

/** 
* Way Property 
*/ 
function maketrue(obj, prop) 
{ 
    obj[prop] = true; // property as a parameter 
} 
maketrue(foo, 'a'); 

console.log(foo.a);