2016-11-30 3 views
3

Javascriptでは、Function.call()は、thisの値と0個以上の引数を指定してFunctionを呼び出すことができます。なぜ私は.call()Function.callできませんか?

自体が機能です。だから理論的には、Function.callは、同じ(または同様の作用をする)関数Function.call.callでなければなりません。 V8では

、このケースのようです:私たちはFunction.call()を呼び出すと

> Function.call === Function.call.call 
true 

、我々はしかし、私はFunction.call.call()を呼び出すことはできません

> Function.call() 
[Function: anonymous] 

匿名関数を取得します。

> Function.call.call() 
TypeError: undefined is not a function 
at repl:1:21 
at REPLServer.defaultEval (repl.js:132:27) 
at bound (domain.js:291:14) 
at REPLServer.runBound [as eval] (domain.js:304:12) 
at REPLServer.<anonymous> (repl.js:279:12) 
at REPLServer.emit (events.js:107:17) 
at REPLServer.Interface._onLine (readline.js:214:10) 
at REPLServer.Interface._line (readline.js:553:8) 
at REPLServer.Interface._ttyWrite (readline.js:830:14) 
at ReadStream.onkeypress (readline.js:109:10) 

ここで何が起こっているの? Function.callは明らかに機能です。このエラーメッセージが示すように、undefinedではありません。

+1

普通のプログラミングの文脈では無意味ですが、 – nicovank

+0

@nicovankもちろん、私はJavascriptの "what if's"を探していましたが、これは誤って遭遇しました。 :) – Qix

+0

[もちろんできます](http://stackoverflow.com/q/31074664/1048572)! – Bergi

答えて

4

短い回答:エラーメッセージは、非常にです。二.call()

Function.callthisで呼び出されている:あなたは

(undefined)(); 

長い答えを実行するとき、それはあなたが得る同じエラーメッセージです。

パラメータを指定せずにこのパラメータを呼び出すと、のthisthisの値として呼び出されます。

したがって、あなたは本当にあなたが(比喩的に)やっていることを意味する

Function.call.call(undefined) 

をやって本当にただ

undefined() 

渡すものではありません

undefined.call() 

(またはundefined )からのパラメータがFunction.call.call()になることは必須です最初のFunction.call()Function自体)のthisコンテキストを無効にし、undefined.call()を呼び出します。

これにより、生成されるエラーメッセージundefined is not a functionが生成されます。

+1

...作業例は 'Function.call.call(Function)'または 'Function.call.call(console.log、console、" hello ")' – Bergi

+0

@Bergi Correctです。この混乱は_errorメッセージ_に起因しています。 – Qix

+2

ああ、私はあなたが自分の質問に自己回答したことを気づかなかった。私はちょうど二重の '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' ' – Bergi

関連する問題