2016-10-15 5 views
6

У меня есть общий вопрос по javascript.Передача объектов против ID

Предположим, у меня есть массив persons из Person объектов. Каждый Person имеет идентификатор, имена, АДРЕС и т.д.

В моих функциях, которые обрабатывают persons, я обычно прохожу Person объект Я манипулирую. Однако это как-то не так. Как будто я теряю память.

Так что мой вопрос:

  • Am I с использованием дополнительной памяти, передавая объекты, а не только их идентификаторы?
  • Использует getPersonByID() и просто передает идентификаторы вместо этого лучше?
  • Как вы можете управлять многими экземплярами объектов?
+1

В JS вы не передаете объект, которому передаете ссылку на объект, поэтому не имеет большого значения для памяти. – Redu

+0

Возможный дубликат [Является ли JavaScript перекрестной ссылкой или языком с пересылкой?] (http://stackoverflow.com/q/518000/1529630) – Oriol

ответ

4

Я использую дополнительную память, передавая объекты, а не только их идентификаторы?

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

Пользуется getPersonByID() и только проездом вместо лучшего варианта идентификаторов?

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

Как вы можете управлять многими экземплярами объектов?

Это зависит от множества вещей, таких как область действия, кто ссылается и т. Д. Предлагаю вам взглянуть на how JS garbage collection and memory management works, чтобы лучше понять его.

+0

Спасибо за ваш ответ. Поэтому, даже если у меня есть следующее: – whateverforever

+0

Так что, даже если у меня есть следующее: var members = []; var activeMembers = []; members.push (новое лицо()); members.push (новое лицо()); activeMembers.push (участники [0]); память будет содержать только * 'members'object *' activeMembers' объект * и два 'Person' объекты право? Это круто. – whateverforever

+0

Извините, я думал, что блок-код будет работать. В любом случае, спасибо за вашу помощь – whateverforever

2

Объект "значения" в JavaScript: ссылки. Передача объекта функции передает ссылку на объект, и это не дороже, чем передача строки (например, значения id) или числа.

Другими словами: передача или присвоение значения объекта делает не включает в себя создание копии объекта.

1

В javascript объекты (объектные литералы, массивы и функции) передаются по ссылке. Когда вы передаете объект функции, вы не копируете его так, как обычно, на C/C++. Вместо этого вы передаете ссылку (в основном второе имя объекта).

function func(object) { object.changed = true; } 
let a = {}; 
func(a); 
console.log(a.changed); //true 

Передача идентификатора на другой стороне будет гораздо более многословен, он фактически создает дополнительные накладные расходы, и это действительно до вас, как вы хотите, чтобы дизайн вашего приложения.

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