解決済
[JavaScript] オブジェクト内で、そのオブジェクトの名前空間を取得する方法はありますか?
こんにちは。JavaScriptでブログをカスタマイズしています。
分からないことがあったので教えてください。
このように定義したオブジェクトで
function func() {
…
}
↓という具合にオブジェクトを作成したときvar obj = new func();"obj"という名前をfuncオブジェクト内で取得することはできるのでしょうか?
本やインターネットで調べてみましたが良く分かりませんでした。
初歩的な質問ですみませんがよろしくお願いいたします。
2008-05-19 22:09の質問
この質問と回答を読んで役に立った場合は「役に立つ質問」に投票してください。投票が多い質問は、役に立つ質問一覧に掲載され、より多くの人に見てもらうことができます。
Ads By Google
回答(1)
1.
2008-05-20 02:43:14

言語実装者でも何でもないので、信頼性に乏しいですが・
オブジェクトがどのオブジェクトに割り当てられているかリンク元をたどってその名前を見つけることはできないと思います。
トップから、全ての名前をたどって、自分自身を見付けることはできるかもしれませんが、
呼び出し元は、関数の内部のような限定されたスコープの中からかもしれず、その場合、いわゆるトップのようなグローバルな環境ではないので、名前を見付けることはできないと思います。
そのような必要が有る場合には、
var obj = new func(arg, …, "obj");
の様に名前を渡すのが簡単かもしれません。
しかし、obj が別の参照先に付け替えられたとしても、それを関知することはできないので、与えられた名前に割り当てられていると仮定することは、反って危ないかもしれません。
オブジェクトがどのオブジェクトに割り当てられているかリンク元をたどってその名前を見つけることはできないと思います。
トップから、全ての名前をたどって、自分自身を見付けることはできるかもしれませんが、
呼び出し元は、関数の内部のような限定されたスコープの中からかもしれず、その場合、いわゆるトップのようなグローバルな環境ではないので、名前を見付けることはできないと思います。
そのような必要が有る場合には、
var obj = new func(arg, …, "obj");
の様に名前を渡すのが簡単かもしれません。
しかし、obj が別の参照先に付け替えられたとしても、それを関知することはできないので、与えられた名前に割り当てられていると仮定することは、反って危ないかもしれません。
自信度 : 自信なし 回答レベル : アドバイス
ありがとうございます。
別の方法を考えてみることにします。
Ads By Google
コメント(4)
#1. BLUEPIXY
2008-05-21 02:40:01
どのような状況でそのようなことが必要になるのかよければ教えて頂けませんか?
#2. imq
2008-05-21 21:02:16
ええと、
JSONPのコールバック関数がグローバルなのが嫌だったので
{コールバック関数名}(json);
メソッドにしてみましたが↓{オブジェクト名}.{コールバック関数名}(json);
JS内で動的にJSONPの外部JSをインクルードして(DOMで追加)<script type="text/javascript" src="JSONPのURL"></script>JSONPのURLでコールバック関数名のパラメータ指定するのに
{JSONPのベースURL}&callback={コールバック関数名}
オブジェクト名までを含める必要性が出てくるので、{JSONPのベースURL}&callback={オブジェクト名}.{コールバック関数名}
オブジェクト内でオブジェクトの名前空間を取得する方法があるのかどうかをちょっと知りたかっただけです。newは使わずにオブジェクト名を固定にすればいいだけなので、そんなに大した話ではないのですけど。
#3. BLUEPIXY
2008-05-22 04:03:07
ああ、なるほど。
昔のLISPなら、"環境"を渡せたかもしれませんが、JavaScript では、今のところそういうのはないですね。
仮に、環境を取り出せたとしても、
呼び出す側がその環境を使わずに呼び出しているのだったら意味はないですね。
外部から呼び出す場合、
全体としてグローバルな名前になるのは、仕方ないですね。
#4. BLUEPIXY
2008-06-11 04:15:09
名前空間、という意味では、eval に評価させることで、その時の名前空間を評価できる。

