2012-05-30 3 views
1

Можно создать дубликат:
What does var that = this; mean in javascript?вар что = это - пожалуйста, вы можете помочь мне понять

Я часто это назначение в Javascript код:

var that = this; 

Это пример:

function Shape(x, y) { 
    var that= this; 

    this.x = x; 
    this.y = y; 

    this.toString= function() { 
     return 'Shape at ' + that.x + ', ' + that.y; 
    }; 
} 

Не могли бы вы объяснить, почему это необходимо?

Пожалуйста, помните, что я очень хорошо знаком с PHP или Java, но не с объектной моделью Javascript.

+0

Не было еще одного вопроса по этому вопросу всего пару часов назад? – Pointy

+0

OFF: пожалуйста, удалите «спасибо, дан» из вашего вопроса. Вопрос не должен касаться только одного человека, но сообщества. –

+1

@idiqual: 'Dan' - это имя OP. Он не благодарит «Дэн». – Nope

ответ

4

Значение this установлено, когда вызывается функция.

Установка that в this сохраняет это значение для функции, определенной внутри этой функции (так как в противном случае получила бы значение для this, что будет зависеть от того, как это (внутренняя функция) называется.

0

this в функции конструктора относится к объекту, который будет создан из него. Однако методы внутри его могут больше не ссылаться на тот же самый объект.

Таким образом, мы обходим эту проблему, сохраняя this в переменной that. Таким образом, мы все равно можем ссылаться на объект, созданный без использования переменной this.

function Shape(x, y) { 
    var that= this; 

    this.toString= function() { 
     //"this" in here is not the same as "this" out there 
     //therefore to use the "this" out there, we preserve it in a variable 
    }; 
} 
4

Он дает внутренней функции доступ к экземпляру, который был вызван методом Shape(). Этот тип переменной доступа называется «закрытием». См. Здесь для получения более подробной информации:

0
  • Shape - это класс JavaScript. У него есть члены toString() и частные свойства this.x
  • это относится к экземпляру текущего класса.
  • Чтобы toString() понял, что он работает под «cu» rrent class instance ', вы назначаете это = this. Поскольку переменную «это» можно получить в пределах области toString(). Что-то это называется оператором «я».
+0

Mmh. Строго говоря, в JS нет классов. 'Shape' - это функция-конструктор. И частные свойства также не существуют, все свойства общедоступны любым кодом, который имеет ссылку на объект. –

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