Ответ 1
Вы можете добавить свойство к функции:
function init() {
init.called = true;
}
init();
if(init.called) {
//stuff
}
Я ищу хорошую технику, чтобы уйти от того, что я искушаюсь: установить глобальную переменную.
В первый раз, когда кто-то запускает функцию, нажав кнопку, она запускает начальную функцию, чтобы превратить несколько вещей в draggables. Позже, если они дважды щелкнут по кнопке, я хочу определить, была ли инициализирована функция init
, и если это так, чтобы не вызывать ее снова. Я мог бы легко сделать это, установив глобальную переменную из функции init
, а затем проверив эту переменную из функции щелчка, но мне интересно, как это сделать, не устанавливая глобальную переменную. Мне бы очень понравился пример способа сделать это.
Вы можете добавить свойство к функции:
function init() {
init.called = true;
}
init();
if(init.called) {
//stuff
}
Хотя ответ @Levi должен работать нормально, я хотел бы представить еще один вариант. Вы должны написать функцию init, чтобы ничего не делать, как только она была вызвана.
var init = function () {
// do the initializing
init = function() {
return false;
}
};
Функция, вызываемая в первый раз, выполнит инициализацию. Затем он будет немедленно перезаписывать себя, чтобы возвращать false в следующий раз после его вызова. Во второй раз, когда функция вызывается, тело функции будет содержать только return false.
Подробнее: http://www.ericfeminella.com/blog/2011/11/19/function-overwriting-in-javascript/
Почему бы вам просто не проверить, есть ли у ваших draggables класс draggable
на них?
if ($('.mydiv').is('.draggable')) {
//do something
}
Function.prototype.fired = false;
function myfunc() {
myfunc.fired = true;
// your stuff
};
console.log(myfunc.fired) // false
myfunc();
console.log(myfunc.fired) // true
Что вы можете сделать, это отменить функцию init из прототипа.
var Obj = function () {
this.init = function () {
document.write("init called<br/>");
this.init = null;
}
}
var o = new Obj();
if (o.init) document.write("exists!<br/>");
o.init();
if (o.init) document.write("exists!<br/>");
o.init();
Первый if
будет истинным и напечатать exists!
, но поскольку функция удалит себя, второй if
завершится с ошибкой. В моем примере я вызываю второй init безоговорочно только для того, чтобы показать, что ничего не произойдет, но, конечно, вы можете называть его только в том случае, если он существует:
if (o.init) o.init();