--- title: Function.prototype.toString() slug: Web/JavaScript/Reference/Global_Objects/Function/toString tags: - Function - JavaScript - Method - Prototype translation_of: Web/JavaScript/Reference/Global_Objects/Function/toString ---
toString() メソッドは、関数のソースコードを表す文字列を返します。
function.toString()
関数のソースコードを表す文字列です。
{{jsxref("Function")}} オブジェクトは、 {{jsxref("Object")}} から継承した {{jsxref("Object.prototype.toString", "toString")}} メソッドをオーバーライドします。つまり、 {{jsxref("Object.prototype.toString")}} を継承しません。 {{jsxref("Function")}} オブジェクトについて、 toString メソッドは関数宣言を表現するオブジェクトを表す文字列を返します。
{{jsxref("Function")}} を文字列値として表現するとき、JavaScript は自動的に toString メソッドを呼び出します。例えば、関数が文字列と連結されるときです。
this 値のオブジェクトが Function オブジェクトでない場合、 toString() メソッドは {{jsxref("TypeError")}} 例外 ("Function.prototype.toString called on incompatible object") を発生します。
Function.prototype.toString.call('foo'); // TypeError
toString() メソッドが組込み関数オブジェクトや Function.prototype.bind 作成された関数に対して呼び出されると、 toString() は、次のようなネイティブ関数文字列を返します。
"function () {\n [native code]\n}"
toString() メソッドが Function コンストラクターで生成された関数に対して呼び出されると、 toString() は "anonymous" という名前の関数宣言に、提供された引数と関数の本体を合成したソースコードを返します。
+ 演算子を使用して、関数の文字列表現を明示的に取得することもできます。
function foo() { return 'bar' }
console.log(foo + ''); // "function foo() { return 'bar' }"
| Function | Function.prototype.toString の結果 |
|---|---|
function f(){}
|
"function f(){}"
|
class A { a(){} }
|
"class A { a(){} }"
|
function* g(){}
|
"function* g(){}"
|
a => a |
"a => a" |
({ a(){} }.a)
|
"a(){}"
|
({ *a(){} }.a)
|
"*a(){}"
|
({ [0](){} }[0])
|
"[0](){}"
|
Object.getOwnPropertyDescriptor({
get a(){}
}, "a").get
|
"get a(){}"
|
Object.getOwnPropertyDescriptor({
set a(x){}
}, "a").set
|
"set a(x){}"
|
Function.prototype.toString |
"function toString() { [native code] }"
|
(function f(){}.bind(0))
|
"function () { [native code] }"
|
Function("a", "b")
|
"function anonymous(a\n) {\nb\n}"
|
| 仕様書 |
|---|
| {{SpecName('ESDraft', '#sec-function.prototype.tostring', 'Function.prototype.toString')}} |
{{Compat("javascript.builtins.Function.toString")}}