我知道我可以在函数上定义属性,然后可以从函数内部访问这些属性。现在,我能解决的唯一语法涉及两个语句。有没有更简洁的方式来表达以下内容:
function myFunc() {
// do some work
}
myFunc.myProp = 0;
我不是在寻找一个字符更少的解决方案——这不是代码高尔夫。我问的是“是否有不同的函数声明模式具有其他可取的优点?” 这几乎是关于使用闭包的方法(因为我怀疑答案就在那里)。
谢谢!
我知道我可以在函数上定义属性,然后可以从函数内部访问这些属性。现在,我能解决的唯一语法涉及两个语句。有没有更简洁的方式来表达以下内容:
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/