Function.prototype.toString()
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
toString()
メソッドは、関数のソースコードを表す文字列を返します。
試してみましょう
構文
function.toString()
返値
関数のソースコードを表す文字列です。
解説
Function
オブジェクトは、 Object
から継承した toString
メソッドをオーバーライドします。つまり、 Object.prototype.toString
を継承しません。 Function
オブジェクトについて、 toString
メソッドは関数宣言を表現するオブジェクトを表す文字列を返します。
Function
を文字列値として表現するとき、JavaScript は自動的に toString
メソッドを呼び出します。例えば、関数が文字列と連結されるときです。
this
値のオブジェクトが Function
オブジェクトでない場合、 toString()
メソッドは 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' }"
例
実際のソースコードと toString の結果との比較
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}" |
仕様書
Specification |
---|
ECMAScript Language Specification # sec-function.prototype.tostring |
ブラウザーの互換性
BCD tables only load in the browser