Оператор this возвращает ссылку на объект, являющийся текущим контекстом вызова. Это позволяет обращаться к свойствам "текущего" объекта: this.property.
Текущий объект не является жестко фиксированным и зависит от контекста вызова функции. Он является, своего рода, скрытым параметром.
Есть четыре различных варианта его передачи.
this
object.method(...)
object
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 будет указывать на текущий объект
| Поиск по сайту |
| Последние темы на форуме |
Forum |
Здравствуйте, А как быть с многоуровневыми объектами?
Точнее: как получить доступ к старшему объекту?
Допустим:
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), если объекта нет - это функция.