Оператор this возвращает ссылку на объект, являющийся текущим контекстом вызова. Это позволяет обращаться к свойствам "текущего" объекта: this.property.
Текущий объект не является жестко фиксированным и зависит от контекста вызова функции. Он является, своего рода, скрытым параметром.
Есть четыре различных варианта его передачи.
| Тип |
Способ |
this |
| неявно, через вызов метода |
object.method(...) |
object |
| явно, через call |
function.call(object,...) |
object |
| явно, через apply |
function.apply(object,...) |
object |
| неявно, через вызов new |
new constructor(...) |
новый, создаваемый объект |
Если ни один из этих способов не задействован, то this указывает на глобальный объект: в браузере это window.
Это происходит при вызове функции без объекта: myFunc(params).
При манипуляциях с DOM при помощи javascript, this обычно используется для работы с событиями. При этом значение this указывает на текущий DOM-элемент, в контексте которого вызван обработчик.
Привязка методов
Так как this не привязано жестко к объекту, то можно привязывать один и тот же метод к любым классам.
walk = function() { this.isWalking = true }
function Bird() { /*...*/ }
function Rabbit() { /*...*/ }
Bird.prototype.walk = Rabbit.prototype.walk = walk
new Bird().walk() // в обоих случаях
new Rabbit().walk() // this будет указывать на текущий объект
Автор: Гость (не зарегистрирован), дата: 29 марта, 2011 - 20:20
#permalinkЗдравствуйте, А как быть с многоуровневыми объектами?
Точнее: как получить доступ к старшему объекту?
Допустим:
var o= { subO: { f: function () { this // Вернёт subO // А как получить, например o? } } }Автор: Mockingbird (не зарегистрирован), дата: 30 ноября, 2012 - 01:00
#permalinkПомогите, пожалуйста. Весь вечер голову ломаю.
function Round(px, py, pR) {
this.x=px;
this.y=py;
this.R=pR;
this.getLength=mGetLength();
}
function mGetLength() {
return this.x;
}
var d=new Round(1, 2, 3);
var f=d.getLength;
Почему возвращает undefined?
если написАть var f=d.x; или var f=d.y; то их возвращает, а вот метод getLength не реализуется почему то
Автор: Mockingbird (не зарегистрирован), дата: 30 ноября, 2012 - 20:49
#permalinkТам return this.x для примера только, там мат. действие в оригинале должно быть, умножение this.x, this.y и this.pR, к примеру, это я пока для примера поставил, пока разбирался)
"думаю, в данном случае не "Round" выступает в качестве объекта, а "mGetLength".. а у mGetLength параметра "х" нету, поэтому и "undefined"."
Я тоже так думал, кстати, но у меня книга есть, оттуда пример, там так написАно 0_о
А как сделать, чтоб mGetLength обращался за переменной в Round?
Только не сильно меняя код, я именно с назначением методов пытаюсь разобраться
Автор: Гость (не зарегистрирован), дата: 14 января, 2013 - 14:22
#permalinkПопробуй перед функцией this.getLength=mGetLength();
поставить строку
that = this;и внутри функции mGetLength() использовать that вместо this.
Автор: 23W (не зарегистрирован), дата: 9 апреля, 2013 - 15:49
#permalinkЧем равен this внутри eval() ?
var j = 1; eval("var j = 0; return this.j;");что вернет eval() ? 1 или 0 ?
Автор: ScalaIsBetter (не зарегистрирован), дата: 26 июня, 2015 - 19:39
#permalinkДоброго времени суток, созрел вопрос. Вот почему this может затеряться при, например, присваивании функции, в которой он прописан, какому-либо другому выражению или переменной? Например:
var obj = { function() { alert (this) } }; var method; ( method = obj.go ) (); // undefined ( почему не obj )