次のコード
リーリークリックすると原文が表示されます
######質問:###### リーリーその後、 varinstance = this;、これは別のオブジェクトを参照していますか?コンストラクターを書き換えた後、返されるインスタンスは別のオブジェクトではないでしょうか?なぜ最終的には等しいのでしょうか
扔个三星炸死你2017-06-30 10:00:37
@mpccc が正しいです。
コンストラクターがオブジェクトを返す場合、新しいオブジェクトがオブジェクトになります。
Secret Gardenのコンストラクターセクションをご覧ください
过去多啦不再A梦2017-06-30 10:00:37
私も初心者なので、答えてみます、間違っていても責めないでください
まず、これは別のオブジェクトを参照していますか
コンストラクターが初めて呼び出されるとき、空のオブジェクトが生成され、関数内の this がこの空のオブジェクトを指し、コードが実行され、最後にこのオブジェクトが返されます、それはuni
です。
2 回目の呼び出し中、最初の関数の書き換えにより、このクロージャの内部インスタンスは、2 回目の実行時 < When code>new Universe() を指しました。 でクロージャを実行すると、空のオブジェクトも生成されますが、そのオブジェクトはそれを使用せず、クロージャ内のインスタンス ( uni
,当第二次执行new Universe()
的时候你执行的是一个闭包,也会产生一个空的对象,但那个对象并没有用到它,反而是直接返回了闭包内部的instance也就是uni
) を直接返します。
それでuni2 === uni
.
迷茫2017-06-30 10:00:37
別の質問ですが、このようにシングルトン パターンを記述するのは少し冗長です。固有のオブジェクトを作成するためにコンストラクターを作成する必要はありません
。 リーリーringa_lee2017-06-30 10:00:37
一度新規作成した後は、コメントを書いてコンストラクターを書き直したのではないでしょうか? var instance = this; という行はなくなり、当然インスタンスは変更されません
リーリー阿神2017-06-30 10:00:37
初めて実行する場合new Universe()
的时候,确实产生了一个新的this
,并且将Universe
构造函数改写了,之后再次调用这个new Universe()
的时候,就只会return instance
、新しいオブジェクトは生成されません。