2016-08-28 7 views
0

私はカイル・シンプソンによる「あなた-ドント・ノウ・JS」シリーズを読んで、このコードブロックに出くわした:new myFunction()は、myFunctionという名前のオブジェクトを返しますか?

function NothingSpecial() { 
    console.log("Don't mind me!"); 
} 

var a = new NothingSpecial(); 
// "Don't mind me!" 

a; // {} 

これによると、最後の行a;は空のオブジェクト{}を返す必要があります。しかし、わかっているように、名前NothingSpecial(NothingSpecial {})のオブジェクトを返します。私はこの動作によってやや混乱しています。 new NothingSpecial()によって作成されたオブジェクトはaであり、理解できる限りaであり、NothingSpecialではありません。また、名前NothingSpecialは関数名と競合します。誰でも説明していただけますか?

+3

'NothingSpecial'はタイプの名前です –

+0

' a'は変数名です。オブジェクトは '= '代入を使用するときに格納されている変数名を知りません – Aprillion

答えて

4

空のオブジェクトを返します。そのオブジェクトはNothingSpecialのインスタンスであり、それを調べるために使用しているツールはあなたにそれを明らかにしています(オブジェクトはその名前の変数に格納されているので、競合はありません)。

2

newキーワードを使用する場合は、プロトタイプ継承を使用して、クラスと呼ばれるもののインスタンスを作成します。 NothingSpecialはクラス/タイプ名であるため、オブジェクトはNothingSpecial {}と表されます。これは変数名とは何の関係もなく、クラスまたは型の名前にすぎません。

1

これは本書でカバーされていると確信していますが、JavaScript関数は単なるオブジェクトの一種であり、インスタンス化することができます。

したがって、newキーワードを使用すると、NothingSpecialオブジェクトのインスタンスが作成され、変数aにバインドされます。あまりにも低レベルになることなく、aはメモリ内のそのオブジェクトへの参照にすぎません。

NothingSpecialに変数またはメンバー関数がないため、空のオブジェクトです。これはNothingSpecialという名前です。なぜなら、それはそれがオブジェクトの型なのですから。変数 "a"は基本的にラベルに貼り付けられているので、NothingSpecialのインスタンスを知ることができます。

関連する問題