在单个语句中声明带有额外属性的javascript函数

Declare javascript function with extra properties in a single statement?

本文关键字:属性 javascript 函数 语句 单个 声明      更新时间:2023-09-26

我知道我可以在函数上定义属性,然后可以从函数内部访问它。现在,我唯一能弄明白的语法包括两个语句。有没有更简洁的表达方式呢?

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

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

谢谢!

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

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

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

这要看情况了。如果你正在寻找私有变量,那么你可以很容易地从函数返回一个函数——一个内部函数将包含对父函数作用域的访问。

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的公共属性访问。

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

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

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