다음 코드
으아아아클릭하시면 원문을 보실 수 있습니다
질문:
으아아아그래서 var instance = this;
에서 이것은 다른 객체를 가리키는 것인가요? 그러면 생성자를 다시 작성한 후 반환된 인스턴스는 다른 객체가 아닌가요? 결국 둘은 왜 평등한 걸까
扔个三星炸死你2017-06-30 10:00:37
@mpccc 맞습니다.
생성자가 객체를 반환하는 경우 new에서 나오는 객체는 이 객체입니다.
시크릿 가든의 생성자 섹션을 살펴보실 수 있습니다
过去多啦不再A梦2017-06-30 10:00:37
저도 초보라서 답변해드릴테니 틀려도 비난하지 마세요
먼저 생성자가 처음 호출되면 빈 객체가 생성되고 함수 내부의 this가 이 빈 객체를 가리킨 다음 코드가 실행되고 마지막으로 이 객체가 반환됩니다. , 즉
입니다. uni
. 에서는 빈 객체를 생성하는 클로저를 실행하지만 해당 객체는 이를 사용하지 않고 대신 클로저 내부의 인스턴스, 즉 uni
,当第二次执行new Universe()
的时候你执行的是一个闭包,也会产生一个空的对象,但那个对象并没有用到它,反而是直接返回了闭包内部的instance也就是uni
를 직접 반환합니다.
그래서uni2 === uni
.
迷茫2017-06-30 10:00:37
또 다른 질문입니다. 이와 같은 싱글턴 패턴을 작성하는 것은 약간 중복됩니다. 고유한 객체를 생성하려면 생성자를 생성할 필요가 없습니다
. 으아악ringa_lee2017-06-30 10:00:37
주석을 작성하고 생성자를 다시 작성하지 않았나요? new를 한 번 만든 후에는 더 이상 var 인스턴스 = this 코드 줄이 없으며 인스턴스는 자연스럽게 변경되지 않습니다. 으아악
阿神2017-06-30 10:00:37
처음 실행new Universe()
的时候,确实产生了一个新的this
,并且将Universe
构造函数改写了,之后再次调用这个new Universe()
的时候,就只会return instance
하면 새로운 객체가 생성되지 않습니다.