JavaScript Литеральный метод объекта: рекурсивный вызов
Можно ли рекурсивно вызывать метод из литерала объекта?
Например:
(function () {
'use strict';
var abc = ['A', 'B', 'C'],
obj = {
f: function () {
if (abc.length) {
abc.shift();
f(); // Recursive call
}
}
};
obj.f();
}());
Ошибка: "f" использовалось до того, как было определено.
Благодарю.
3 ответа
Вы можете, используя выражение именованной функции:
f: function myself() {
if (abc.length) {
abc.shift();
myself(); // Recursive call
}
}
Обязательно прочитайте: http://kangax.github.com/nfe/
f
это метод на вашем объекте. В результате, когда вы находитесь в f
, this
будет объектом, к которому f
прилагается. Так что рекурсивно называть f
использовать this.f()
f: function () {
if (abc.length) {
abc.shift();
this.f(); // Recursive call
}
}
Просто обратите внимание, что внутри f
, this
будет только текущий объект, если f
вызывается как метод: obj.f();
Если вы делаете что-то вроде: obj.f.call(lala);
, затем this
теперь будет lala
, И если вы делаете что-то вроде:
var func = obj.f;
func();
Сейчас this
это глобальный объект внутри f
(или неопределенный в строгом режиме)
Там нет переменной с именем f
определяется в любом месте вашего кода. использование obj.f()
(или же this.f
если вы знаете this
указывает, где это должно).