将属性添加到JavaScript函数是否可以接受?

JavaScript函数添加属性或值是否可以接受?

例:

var f = 1;

function foo (param) {
    f++;
}

var fooFunc = foo;

fooFunc.dummy = f;

console.log('fooFunc: ' + fooFunc);
console.log('fooFunc.dummy: ' + fooFunc.dummy);

上面的示例创建一个函数(foo),然后将其分配给一个新变量(fooFunc),然后将一个虚拟属性添加到fooFunc.

运行时,此示例首先打印函数的文本,然后打印预期值(在本例中为1).打印该功能时,它不会显示虚拟值的任何指示:

fooFunc: function foo(param) {
    f++;
}
fooFunc.dummy: 1 

JsFiddle在这里 – 打开浏览器的JavaScript控制台以查看日志消息:http://jsfiddle.net/nwinkler/BwvLf/

为什么这样做?存储虚拟属性的位置,以及在记录函数时为什么不打印?

最后,即使这有效,使用它是一个好主意(或可接受的做法)?我不想就此开始一个开放式的讨论,而是看看是否有记录的使用,或者人们在JavaScript编码指南中劝阻这一点.

最佳答案
JavaScript中除了原语(null,undefined,number,string,boolean)之外的所有东西都是对象.所以函数基本上是对象.

JavaScript中的对象可以具有属性和方法,因此也具有功能.

所有函数都继承自Function.prototype,并具有通过此链的某些属性(名称,长度)和方法(.call,.apply).

保持属性附加到函数本身有时非常有用,例如缓存信息,调用次数等.以这种方式使用它没有任何错误.

更多细节:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Function

转载注明原文:将属性添加到JavaScript函数是否可以接受? - 代码日志