Если в методе не нужно возвращать некое значение, то лучше сделать чтобы этот метод возвращал this
. Это позволяет программировать в каскадном стиле:
myObj.prepare().activate();
Напомню, что если метод явно ничего не возвращает, то он возвращает undefined
. Исключение составляют конструкторы, которые по умолчанию и так возвращают this
, то есть указатель на новый созданный объект. Поэтому в конструкторах не нужно писать return
.
2 комментария:
Полезно также помнить о том, на что указывает 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)
Отправить комментарий