由于函数是第一类对象,因此应该可以将它们分配给它们的成员。
我是否正确地认为arguments.callee
会这样做?
还有其他方法可以设置这些字段吗?
如何在第一种情况下设置field
?
function something1() {
arguments.callee.field = 12;
}
alert(something1.field); // will show undefined
something1();
alert(something1.filed); // will show 12
something2 = function() {
arguments.callee.field = 12;
};
alert(something2.field); // will show undefined
something2();
alert(something2.field); // will show 12
更新1
我的意思是如何在运行时从函数内部访问成员。
答案 0 :(得分:1)
我将如何做到这一点:
function something1() {
this.field = 12;
}
var test = new something1();
alert(test.field); // alerts "12"
test.field = 42;
alert(test.field); // alerts "42"
如果您要将其视为类,则需要先创建它的新实例,然后才能访问其字段。
答案 1 :(得分:1)
您无需使用arguments.callee
来引用具有名称的函数;你可以使用这个名字。当您使用
function name(...) { ... }
语法;但即使在函数表达式中,您也可以提供临时名称:
(function temp_name(...) { ... })(arg);
因此,如果要从函数内部设置属性,可以编写:
function something1() {
something1.field = 12;
}
alert(something1.field); // will show undefined
something1();
alert(something1.field); // will show 12
something2 = function something2() { // note the second "something2"
something2.field = 12;
};
alert(something2.field); // will show undefined
something2();
alert(something2.field); // will show 12
答案 2 :(得分:1)
我是否正确地认为arguments.callee会这样做?
是的,但现在他们deprecated了。
还有其他方法可以设置这些字段吗?
替换callee
的官方方法是使用显式函数名称,如funcName.propertyName=...
中所示。然而,这并不总是方便的,例如,动态生成的功能。引用John Resig,we're going to miss arguments.callee,它对特定任务非常有用。
答案 3 :(得分:0)
简单
function something1() {};
something1.Property = "Foo";
您可以像普通对象一样直接将属性分配给任何函数。如果用OOP语言来创建静态属性和方法。
修改
功能内部相同
function something1() {
something1.AnotherProp = "Bar";
};
something1.Property = "Foo";