1

我知道我可以在函数上定义属性,然后可以从函数内部访问这些属性。现在,我能解决的唯一语法涉及两个语句。有没有更简洁的方式来表达以下内容:

function myFunc() {
    // do some work
}
myFunc.myProp = 0;

我不是在寻找一个字符更少的解决方案——这不是代码高尔夫。我问的是“是否有不同的函数声明模式具有其他可取的优点?” 这几乎是关于使用闭包的方法(因为我怀疑答案就在那里)。

谢谢!

4

3 回答 3

2

特别是如果你想从函数本身内部访问函数的属性,你最好这样做:

var theFunction = function() {
  function theRealFunction() {
    // the code
    if (theRealFunction.something == "not whatever")
      // do something
    // more code
  }

  theRealFunction.something = "whatever";
  return theRealFunction;
}();

这样做是将您的函数声明包装在一个匿名函数中。通过函数名访问函数属性的问题在于,它必须通过在周围范围内查找函数名来做到这一点。这有点恶心,但至少这样它涉及一个本质上是私有的范围。无论结果函数(作为匿名函数的返回值返回)是否分配给不同的变量、作为处理函数传递给函数等,它都可以工作。

于 2013-04-02T00:52:33.890 回答
2

这真的,真的完全取决于。如果您正在寻找私有变量,那么您可以轻松地从函数返回一个函数——内部函数将包含对其父范围的访问。

var outer_function = (function () {
    var private_var = "secret",
        public_var  = "public",

        inner_function = function () {
            return private_var;
        };

    inner_function.public_var = public_var;
    return inner_function;
}());

outer_function现在等于inner_function,可以访问随附的数据。任何附加到内部的属性(以您所做的方式)现在都可以作为outer.

为此,您可以返回一个类的构造函数,它具有公共静态属性,其中包含的变量充当私有静态属性,在您构建的“类”的每个实例之间共享。

于 2013-04-02T00:56:26.463 回答
1

不完全是您问题的答案,但是如果您想阅读一些可以在定义 javascript 函数时使用的不同设计模式,这是我读过的关于该主题的最佳文章之一:

http://www.klauskomenda.com/code/javascript-programming-patterns/

于 2013-04-02T00:59:02.663 回答