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