21.03.2008

JavaScript: return this;

Если в методе не нужно возвращать некое значение, то лучше сделать чтобы этот метод возвращал this. Это позволяет программировать в каскадном стиле:

myObj.prepare().activate();

Напомню, что если метод явно ничего не возвращает, то он возвращает undefined. Исключение составляют конструкторы, которые по умолчанию и так возвращают this, то есть указатель на новый созданный объект. Поэтому в конструкторах не нужно писать return.

2 комментария:

Alexander комментирует...

Полезно также помнить о том, на что указывает this в теле метода в зависимости от типа вызова этого метода. Привет от Крокфорда:
- вызов как функция foo(params);
this = glogal = window;
default return = undefined;
- вызов как метод obj.foo(params);
this = obj;
default return = undefined;
- вызов как конструктор new_obj = new foo(params);
this = new_obj;
default return = new_obj;

Так что если вы отдали кому-то callback-функцию fCall, и этот кто-то вызывает её просто как fCall(params), то this в этой функции укажет на объект global. Если это нежелательно, то можно отдать function(){ obj.fCall(params); }. Тогда this укажет на obj. Кроме того, на значение this можно влиять через глобальные функции apply и call.

Иван Травкин комментирует...

Я полностью согласен с автором; "return this;" - признак хорошего тона в программировании.

(Думаю, эта фишка происходит от Смолтока, там либо ты что-то возвращаешь, либо метод сам (всегда) возвращает self, т. е. this в переводе на JS)