Оператор this возвращает ссылку на объект, являющийся текущим контекстом вызова. Это позволяет обращаться к свойствам "текущего" объекта: this.property.
Текущий объект не является жестко фиксированным и зависит от контекста вызова функции. Он является, своего рода, скрытым параметром.
Есть четыре различных варианта его передачи.
| неявно, через вызов метода |
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 будет указывать на текущий объект
Здравствуйте, А как быть с многоуровневыми объектами?
Точнее: как получить доступ к старшему объекту?
Допустим:
var o= { subO: { f: function () { this // Вернёт subO // А как получить, например o? } } }Если ничего не путаю, необходимо будет обращаться напрямую. чтобы получить subO в f, необходимо обращаться как o.subO, и так далее.
Помогите, пожалуйста. Весь вечер голову ломаю.
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 не реализуется почему то
мне кажется, что ошибка здесь:
"function mGetLength() {
return this.x;
}"
думаю, в данном случае не "Round" выступает в качестве объекта, а "mGetLength".. а у mGetLength параметра "х" нету, поэтому и "undefined".
И вообще странная функция какая-то.. у тебя же уже есть параметр "х", для чего длину добавлять отдельно, да еще и функцией? О_о или я не правильно понял что?
Если кому-то еще интересно, то ошибки две:
this.getLength=mGetLength;
скобки не нужны, если мы хотим, чтоб getLength была не переменной, а методом.
А вот при вызове метода наоборот нужны скобки:
var f=d.getLength();
Там return this.x для примера только, там мат. действие в оригинале должно быть, умножение this.x, this.y и this.pR, к примеру, это я пока для примера поставил, пока разбирался)
"думаю, в данном случае не "Round" выступает в качестве объекта, а "mGetLength".. а у mGetLength параметра "х" нету, поэтому и "undefined"."
Я тоже так думал, кстати, но у меня книга есть, оттуда пример, там так написАно 0_о
А как сделать, чтоб mGetLength обращался за переменной в Round?
Только не сильно меняя код, я именно с назначением методов пытаюсь разобраться
Попробуй перед функцией this.getLength=mGetLength();
поставить строку
that = this;и внутри функции mGetLength() использовать that вместо this.
Чем равен this внутри eval() ?
var j = 1; eval("var j = 0; return this.j;");что вернет eval() ? 1 или 0 ?
Доброго времени суток, созрел вопрос. Вот почему this может затеряться при, например, присваивании функции, в которой он прописан, какому-либо другому выражению или переменной? Например:
var obj = { function() { alert (this) } }; var method; ( method = obj.go ) (); // undefined ( почему не obj )Извините, небольшая поправка:
var obj = {go: function() { ...встречный вопрос, который даст понимание что такое this в яваскрипт...
А в чем разница между методом и функцией?...
Правильно, методы у объектов, и вызов выглядит как obj.go(), т.е. перед go стоит объект. А в вашем примере, какой объект? Вы метод превратили в обычную функцию и выполнили ее.
грубо говоря - this ссылается на тот объект, который стоит перед методом (кроме apply/call), если объекта нет - это функция.