如何在不设置全局变量的情况下确定是否调用了函数
我正在寻找一种好的技术来摆脱我想要做的事情:设置一个全局变量。
有人第一次通过单击按钮来运行某个function时会触发一个初始function,将一些东西变成可拖动的东西。 稍后,如果他们第二次单击该按钮,我想确定init
函数是否已初始化,如果是,则不再调用它。 我可以通过从init
函数设置一个全局变量然后从click函数中检查该变量来轻松完成此操作,但我想知道如何在不设置全局变量的情况下执行此操作。 我真的想要一个这样做的方法的例子。
您可以向函数添加属性:
function init() { init.called = true; } init(); if(init.called) { //stuff }
虽然@Levi的答案应该很好,但我想提出另一个选择。 你会过度编写init函数,一旦调用它就什么都不做。
var init = function () { // do the initializing init = function() { return false; } };
第一次调用时的函数将执行init。 然后它会立即覆盖自己,以便在下次调用时返回false。 第二次调用函数时,函数体只包含return false。
欲了解更多信息, 请访问 : http : //www.ericfeminella.com/blog/2011/11/19/function-overwriting-in-javascript/
你为什么不检查一下你的拖拉机是否有可拖动的类?
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
"); this.init = null; } } var o = new Obj(); if (o.init) document.write("exists!
"); o.init(); if (o.init) document.write("exists!
"); o.init();
第一个if
是真的并且打印exists!
但由于该函数自行删除,第二个if
将失败。 在我的例子中,我无条件地调用第二个init只是为了表明什么都不会发生,但当然只有存在才能调用它:
if (o.init) o.init();