атрибуты массива javascript, переданные по ссылке - PullRequest
0 голосов
/ 02 января 2012

в этом примере кажется, что мы можем использовать переменную (здесь «секунда») для заполнения массива myArray, как если бы second была «ссылкой» на myArray: это действительно то, что здесь происходит

var myArray = [];
var second = myArray;
    second.target = … //we fill the "second" variable
    second.offsetX = …
    second.offsetY = …

var target = myArray.target; //then we retrieve the result from myArray
if (target) {

Спасибо

Ответы [ 4 ]

2 голосов
/ 02 января 2012

секунда была "ссылкой" на myArray: это действительно то, что здесь происходит?

Да.

Объекты - как массивы - в JavaScript передаются и присваиваются по ссылке .

Из вашего примера myArray и second оба указывают на один и тот же объект в памяти.

1 голос
/ 02 января 2012
var myArray = []; 

Это просто объявление массива. Это то же самое, что и var myArray=new Array();

Об ссылках на массивы :

var second = myArray; 

Мы указываем переменную secondв ячейку памяти myArray.Здесь будет создан новый объект секунда, указывающий на содержимое myArray.Итак, если вы читаете содержание второго.Это будет читать myArray.Но вы редактируете / обновляете содержимое секунды, содержимое myArray будет скопировано в секунду и будет изменено.Как сказал Бакудан , это мелкая копия .См. Пример ниже:

var myArray=[10,20,30];
var second =myArray; //second will contain 23,45 and 100.

Если мы обновим массив второй, second=[100,200,300] Исходное содержимое будет очищено и будет записано 100 200 300.

Чтобы добавить содержимое во второй массив без удаленияИсходный контент, нам нужно использовать функцию push, как показано ниже:

second.push(100);second.push(200),second.push(300);

Теперь, содержание second будет 10,20,30,100,200,300.

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

second.target = "testString";
second.offsetX =87;
second.offsetY =56;

Это создание свойств объекта.Это то же самое, что и

second={"target":"testString","offsetX":87,"offsetY":56};

Если вы хотите получить доступ к значению 87, к нему можно получить доступ как second.offsetX or second[offsetX].

Дополнительная информация о массиве сценариев Java доступна здесь здесь .

1 голос
/ 02 января 2012

Это называется shallow copy. У вас есть ссылка (var second = ...) на исходный массив (var myArray = ...), они оба указывают на одну и ту же память в памяти виртуальной машины JavaScript.

Таким образом, вы можете получить доступ к массиву с помощью second или myArray.

1 голос
/ 02 января 2012

Да, именно это и происходит здесь.Когда вы (например) добавляете новые элементы в second, вы можете прочитать их позже из myArray.

Кстати, я чувствую, что вы делаете что-то странное.Почему вы устанавливаете offsetX для массива ?

...