2

JavaScript の「クラス」を想像してみてくださいFoo:

var Foo = function()
{
};

そしてそのクラスのインスタンス:

var foo = new Foo();

Fooインスタンスから直接文字列を取得できますかfoo、それともインスタンス化後にインスタンスFooに関連付けることができない単なる推移的な変数ですか?foo


EDIT 1 SLaks は の使用を提案してfoo.constructorいます。これは与える:

function ()
{
}

このアプローチは、関数が次の形式で定義されている場合に機能します。

function Foo()
{}

...しかし、これは常に当てはまるとは限りません。


EDIT 2スキジーのアプローチを試してもうまくいきません。これは本質的に Slack の方法よりも完全な試みですが、空の文字列が生成されます。""


EDIT 3これが実際に何とか可能かどうか疑問に思います。Chrome の JavaScript コンソールからの次のトランスクリプトに注目してください。

> var Foo = function() {}
undefined
> var foo = new Foo();
undefined
> foo
Foo

最後の行で、Chrome はオブジェクトのタイプが であることを明確に認識していますFoo。ただし、これは単なる Chrome の問題であり、標準の JavaScript ではなく、言語自体からアクセスできない場合もあります。

4

4 に答える 4

4

名前付き関数を使用:

> var Foo = function Foo(){};
> undefined
> var foo = new Foo();
> undefined
> foo.constructor.name
> "Foo"

名前のない関数を使用:

> var Foo = function (){};
> undefined
> var foo = new Foo();
> undefined
> foo.constructor.name
> ""
于 2013-10-14T14:15:28.930 に答える
2

モジュール コードを変更せずに目的を達成する方法はありません。

のような関数を定義すると

var Foo = function() {...}

関数、およびそれをコンストラクターとして使用して作成されたオブジェクトは、名前を認識しませんFoo。name について教えてくれるvar x = 0値を取得しようとすることもできます。0x

于 2012-10-21T02:14:16.680 に答える
0

Fooから関数を取得できますfoo.constructor
ただし、その関数インスタンスを、それを割り当てる変数の名前に関連付けることはできません。

于 2012-10-21T01:50:17.867 に答える