2017-02-13 29 views
-2

Возможно, вопрос уже существует, но я ничего не нахожу, потому что не знаю, как назвать эту проблему.Назначение переменной JavaScript

У меня есть функция объекта и хочет назначить переменный объект в переменный:

this.myFunction = function() { 
    var selection;    // internal variable 
    selection = this.selection; // both are [0,0] 

    console.log(this.selection); // result: [0,0] 

    selection[0] = 500;   // set internal variable[0] 500 
    console.log(selection);  // result: [500,0] 
    console.log(this.selection); // result: [500,0] <-- expected: [0,0] 
} 

Как я могу изменить локальные переменный без изменения других?

+2

Вам необходимо создать копию массива. –

+0

Назначение javascript всегда по ссылке для объектов, если вы хотите также причину, почему – Kaddath

+0

'Массивы - это объекты типа списка, у прототипа которых есть методы для выполнения операций обхода и мутации.' Это означает, что всякий раз, когда вы назначаете массив другой переменной, это просто мутатор. Это не глубокий клон. –

ответ

1

Когда вы звоните selection = this.selection, вы копируете ссылку this.selection значение. Поэтому, когда вы меняете локальную переменную selection, вы тоже меняете this.selection.

Вы должны использовать метод slice() to create a new array от значения. Например:

selection = this.selection.slice(); 
+0

'selection = this.selection.slice()' работает спасибо –