1

関数はファースト クラス オブジェクトであるため、関数のメンバーに割り当てることができるはずです。

それがこれを行うと私は正しいと思い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

実行時に関数内からメンバーにアクセスする方法を意味します。

4

4 に答える 4

1

私は、arguments.callee がこれを行うと考えていますか?

はい、そうでしたが、今では廃止されました。

これらのフィールドを設定する他の方法はありますか?

公式の置換方法calleeは、 のように明示的な関数名を使用することですfuncName.propertyName=...。ただし、これは、動的に生成された関数などの場合、常に便利とは限りません。John Resig の言葉を引用すると、 arguments.callee を見逃してしまいますが、これは特定のタスクに非常に役立ちました。

于 2012-02-01T20:59:19.973 に答える
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
于 2012-02-01T20:42:26.030 に答える
1

これが私がそれを行う方法です:

function something1() {
    this.field = 12;
} 

var test = new something1();

alert(test.field); // alerts "12"
test.field = 42;
alert(test.field); // alerts "42"

クラスのように扱う場合は、そのフィールドにアクセスする前に、新しいインスタンスを作成する必要があります。

JSFiddle

于 2012-02-01T20:39:12.940 に答える
0

単純

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

通常のオブジェクトと同様に、プロパティを任意の関数に直接割り当てることができます。OOP 言語で言えば、静的プロパティとメソッドを作成します。

編集

関数内も同様

function something1() {
     something1.AnotherProp = "Bar";
};
something1.Property = "Foo";
于 2012-02-01T20:38:23.737 に答える