関数内で自分自身の名前を表示するにはどのように行えばいいのでしょうか?
function test_func(){
alert(this.func_name); // ※ this.func_nameは適当です。
}
この、alert()の部分で関数名の "test_func" と返すような方法を
探しています。無いでしょうか?
arguments.callee がそのFunctionオブジェクト自身を参照します。
arguments.callee.toString() などして
あとは文字列操作で切り出せばよいのでは。
非公式ですがNetscapeだとFunctionオブジェクトにnameプロパティがあり
arguments.callee.name でその関数名を取得できます。
有り難うございます。
出来ました。助かりました(^.^)
完了でした...
すいません。引きお願いします。
調べたところ、arguments がfunctionオブジェクトのプロパティ(メソッド)だという事がわかりました。
argumentsを、function test() の中でtest.argumentsとするとちゃんとでき、もちろん単純にargumentsとしても出来ますが、this.argumentsとすると「undefined」が返ってきてしまいます。
thisでは何故出来ないのでしょうか?
関数コード内でのthisは、呼出元のオブジェクトを参照するキーワードだからです。
object.test(); や test.call(object); のように呼出した場合、
test() 内部のコードにおける this は object を参照します。
単に test(); のように呼び出し場合、呼出元のオブジェクトはありません。
この場合 this はグローバルオブジェクト(windowオブジェクト)を参照します。
つまり、関数内部で this.arguments を参照することは、
test() という呼び出し方をする限り window.arguments を参照するのと同じなので、
それが未定義であれば undefined が返るでしょう。
# Functionオブジェクトのargumentsプロパティ(関数内部で使用するargumentsではない)は
# JavaScriptではdeprecateとなってます。
有り難うございます。thisの意味を勘違いしていました。
『自分』を指すものだとばかり思っていました。
メソッドやプロパティを追加する場合のthis.〜もそういう事なん
ですね。クラスにプロパティを追加するというより、インスタンス
化するときに、そのオブジェクトに追加するという感じですね。
argumentsは将来削除されてしまうという事でしょうか? もしそう
ならあまり使わないほうがいいということですね。将来というのが
20〜30年後のことを指しているといいのですが...
> argumentsは将来削除されてしまうという事でしょうか?
誤解を招く書き方をしたようにも思うので改めて書いておくと:
function test () {
var hoge = arguments[0];
// このargumentsは問題なし。
// Functionオブジェクトのargumentsプロパティがdeprecateである件とは無関係。
var fuga = test.arguments[0];
// このargumentsがdeprecate。
}
JavaScript1.4からdepracateにされてます。
http://devedge.netscape.com/library/manuals/2000/javascript/1.5/reference/function.html#1193312
JScriptの方では特にそういうことは書かれていないので、JScript向けに書くなら問題ないのかもしれません。
ECMAScriptでは、そもそもFunctionオブジェクトのargumentsプロパティを規定してません。
(狭義の)JavaScriptの方で将来的に削除されるかどうかは、その可能性がある、という以上のことは何も決まってないでしょうね。
有り難うございます。勉強になります。
完全な理解にはほど遠いですが、なんとなく理解することが出来ました。
英語も勉強します(;_;)