Вопрос о переменных ссылках - PullRequest
0 голосов
/ 18 июня 2011

Почему каждый раз, когда вы вносите изменение в одну ссылку массива, она не вносит изменений и в другую, хотя обе указывают на один и тот же объект.

Пример:

myArray = new Array(5,5,5);
Array2 = new Array(7,7,7);
alert(myArray)  // still equals 5,5,5,`

Ответы [ 4 ]

1 голос
/ 18 июня 2011

Вот что подразумевается под экземплярами . Array - это конструктор . Вы создаете экземпляр , используя ключевое слово new. Таким образом, использование var myArr = new Array(5,5,5) переменной myArr является ссылкой на экземпляр , созданный («созданный») конструктором Array .

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

var myArr = [5,5,5],
    myStr = '[5,5,5]',
    myObj = {myArr:[5,5,5]};
0 голосов
/ 18 июня 2011

Что вы пытаетесь спросить здесь?Он по-прежнему равен 5,5,5, потому что это массив, на который вы ссылаетесь!Таким образом, myArray.toString() приведет к 5,5,5, и это именно то, о чем вы получаете предупреждение.

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

0 голосов
/ 18 июня 2011

Похоже, у вас есть некоторое недопонимание о том, как работают ссылки. В вашем примере вы создаете два отдельных объекта, и есть две переменные, ссылающиеся на эти объекты. Чтобы изменение одной переменной отразилось на другой, вам нужны две переменные, указывающие на один и тот же объект, например:

myArray = new Array(5);
myArray2 = myArray; // Now we have two variables pointing to same object
myArray2[2] = 4;
if (myArray[2] == 4) alert("Same value");
0 голосов
/ 18 июня 2011

Говоря new Array(), вы создаете совершенно новый объект массива, не связанный с первым. Это было бы как два яблока. Еда одного не влияет на другого.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...