我希望能够将属性分配给函数本身内的函数。我不想将它分配给调用对象。所以我想要相同的做法:
var test = function() {
return true;
};
test.a = 'property on a function';
alert(test.a);
而不是这个,将属性分配给全局对象:
var testAgain = function() {
this.a = "this property won't be assigned to the function";
return true;
};
testAgain();
alert(window.a);
编辑:澄清一下,我想知道是否有这样的事情:
var test = function() {
function.a = 'property on a function';
};
alert(test.a); // returns 'property on a function'
不知道该函数被称为测试或必须执行它。 我当然知道这不是有效的语法
答案 0 :(得分:3)
[有没有办法在函数上设置属性]而不知道函数被调用
test
或必须执行。
强调我的。
您可以在函数上设置属性,而无需知道其全局变量名称必然是什么,但是做必须以某种方式引用该函数。
我认为模块模式非常接近:
window.test = (function () {
//the function could be named anything...
function testFn() {
...code here...
}
//...so long as the same name is used here
testFn.foo = 'bar';
return testFn;
}());
window.test.foo; //'bar'
外部封闭会阻止testFn
在全局范围内被访问,因此所有其他引用都必须使用window.test
。
这部分答案与问题的先前版本有关。
最简单的方法是使用命名函数:
var test = function testFn() {
testFn.foo = 'bar';
return true;
};
test.foo; //undefined
test();
test.foo; //'bar'
更好的方法是使用模块模式,这样就不会意外地产生全局泄漏问题:
var test = (function () {
function ret() {
ret.foo = 'bar';
return true;
}
return ret;
}());
test.foo; //undefined
test();
test.foo; //'bar'
答案 1 :(得分:1)
var testAgain = function() {
arguments.callee.a = "this property won't be assigned to the function";
return true;
};
testAgain();
alert(testAgain.a);
答案 2 :(得分:0)
您可以通过简单地使用名称来指定属性,这样做:
var test = function () {
test.a = 'a';
return true;
};
调用test
时,将设置属性。
你可以使用arguments.callee
,正如su-
所说,但这被认为是非常糟糕的做法。此外,它不会在严格模式下工作。
答案 3 :(得分:0)
var test = function() {
test.a = 'a';
};
或者你可以使用原型,阅读更多here。