Javascript эквивалент присваивания по ссылке?

Есть ли способ, которым я могу быть более подробным в Javascript, указывая локальную переменную на свойство объектов?

Например, в PHP я могу это сделать:

$obj->subobject->property = 'Foo'; $property =& $obj->subobject->property; $property = 'Bar'; echo $obj->subobject->property; // output 'Bar' 

Это не очень хороший пример, но вы поняли эту идею.

Я хочу скопировать это поведение в Javascript. Мне часто приходится довольно глубоко проникать в объекты, и мне становится очень неприятно:

 if (please.stop.making.me[somevar].type.so.much.length) { please.stop.making.me[somevar].type.so.much[newSubObjectKey] = anObject; } // perform more operations on the object down here 

Было бы намного легче читать и намного проще вводить:

 var subObj = is.much.easier.to.type.once; if (subObj.length) { subObj[newSubObjectKey] = anObject; } // now that's much better 

Я знаю, что я действительно должен это знать уже, но я просто продвигаюсь к «продвинутому новичку» в Javascript.

Solutions Collecting From Web of "Javascript эквивалент присваивания по ссылке?"

В Javascript все передается по значению, но тип переменной определяет, является ли это ссылкой, переданной по значению или нет;

  • Объекты являются ссылками
  • Примитивы (числа, строки и т. Д.) Передаются по значению.

Проще говоря, если вы передадите переменную функции, которая является массивом, изменение ее в функции повлияет на родителя.

Однако, передавая ему значение в массиве, это не будет. Естественно, абсолютно ничего не мешает вам обернуть примитив в объект, чтобы он работал как «указатель».

Было бы намного легче читать и намного проще вводить:

 var subObj = is.much.easier.to.type.once; if (subObj.length) { subObj[newSubObjectKey] = anObject; } 

Вы даже пробовали это? Потому что он работает.

Что касается актуального вопроса. У вас не может быть ссылок или указателей на значения. Все передается по значению в javascript (без ссылки).

Edit: Я забыл упомянуть, что некоторые значения являются ссылками. Вы все еще не можете получить указатель на эти ссылочные значения.

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

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

Однако примитивные числа и строковые значения передаются по значению , поэтому вы не можете создавать новые ссылки на них.