7

我试图模仿 JavaScript 函数上的静态变量,目的如下:

$.fn.collapsible = function() {
  triggers = $(this).children('.collapse-trigger');
  jQuery.each(triggers, function() {
    $(this).click(function() {
      collapse = $(this).parent().find('.collapse');
    })
  })
}

如何保存“折叠”对象,以便不必在每次调用时都“找到”它?我知道使用命名函数我可以做一些类似“someFunction.myvar = collapse”的事情,但是像这样的匿名函数呢?

谢谢!

4

4 回答 4

13

您可以将变量保存在函数中,使用其中一个,functioName.myVar = value或者arguments.callee.myVar = value如果您没有当前函数名称。

arguments.callee是您当前所在的功能。

于 2009-03-15T03:35:35.103 回答
9

对于匿名函数,您可以使用返回函数的函数。

例如:

var myAnonymousFunction = (function(){
    var myFirstStatic = $("#anElement");
    var anotherStatic = true;
    return function(param1,param2) {
        // myFirstStatic is in scope
        // anotherStatic also
    }
})();

应该像魅力一样工作,并且您可以确保静态的初始化代码只执行一次。

于 2009-03-15T03:38:55.203 回答
2

似乎在 Stack Overflow 的其他地方可以找到更好的答案。

简而言之,您实际上可以在不污染命名空间的情况下为匿名函数命名,但仍然允许自引用。

mything.prototype.mymethod = function myKindOfFakeName() {
    myKindOfFakeName.called = true;
}
于 2012-01-31T01:07:05.247 回答
0

只要您将函数分配给这样的变量,您就应该能够以 访问它$.fn.collapsible,从而将变量分配为$.fn.collapsible.myvar.

于 2009-03-15T02:39:31.523 回答