如何分配给函数的成员

How to assign to members of a function?

本文关键字:函数 成员 分配 何分配      更新时间:2023-09-26

由于函数是第一类对象,因此应该可以分配给它们的成员。

我认为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

我的意思是,当函数运行时,如何从函数内部访问成员。

您不需要使用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

以下是我的操作方法:

function something1() {
    this.field = 12;
} 
var test = new something1();
alert(test.field); // alerts "12"
test.field = 42;
alert(test.field); // alerts "42"

如果要将其视为一个类,则需要先创建一个新的实例,然后才能访问其字段。

JSFiddle

我这样想对吗?卡利这么做了?

是的,是的,但现在他们反对它。

有其他方法可以设置这些字段吗?

取代callee的官方方法是使用显式函数名,如funcName.propertyName=...。然而,这并不总是方便的,例如,对于动态生成的函数。引用John Resig的话,我们会错过辩论。总之,它对特定任务非常有用。

简单

function something1() {};
something1.Property = "Foo";

您可以像普通对象一样直接将特性指定给任何函数。如果说在OOP语言中创建静态属性和方法。

编辑

功能内部相同

function something1() {
     something1.AnotherProp = "Bar";
};
something1.Property = "Foo";