Справочник javascript: this

Форум

Учебник Node.JS скринкаст Стандарт языка

Справочник

Discord чат

 
Статьи Тест знаний Аналоги функций PHP  

this

Описание, примеры

Оператор 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  )

 
Поиск по сайту
Содержание

Дерево всех статей

Последние темы на форуме
Forum