/*
생성자 함수를 new와 함께 호출하면 항상 기본값은 this로 참조되는 객체가 반환된다.
함수 내에 return문을 쓰지 않았더라도 생성자는 암묵적으로 this를 반환한다.
그러나 반환 될 객체를 다음과 같이 따로 정할 수도 있다.
*/
function Obj(){
// 생성자가 다른 객체를 대신 반환하기 때문에 다음의 'name' 프로퍼티는 무시된다.
this.name = "홍길동";
// 새로운 객체를 생성하여 반환한다.
var that = {};
that.name = "김길동";
return that;
};
var o = new Obj();
console.log(o.name) // 김길동

// 싱글톤은 항상 같은 객체를 만드는 것??(같은 객체를 참조)인데 자바스크립트는 별도의 문법이 존재하지 않는다.
function Obj() {
// Class를 이용해 object를 만들었다는 것을 강조할때 object라는 표현보다 'instance'라는 표현을 쓴다.
if(typeof Obj.instance === "object") { // 최초 실행했을때에는 undefined 이다. // false
return Obj.instance;
}
this.start = 10;
this.end = 100;
// 생성자 함수에서 this는 생성된 객체를 참조한다. // (외부에서 new 키워드로 생성되는 객체를 참조한다는 말이 맞겠다.)
// window.Obj.instance = this;
Obj.instance = this; // 최초(가장먼저) new 키워드로 생성된 객체를 Obj.instance에 저장한다. (함수도 객체이기에 이와 같은 문법이 가능하다)
}
var o = new Obj();
var o1 = new Obj();
console.log(o);
console.log(o === o1);
console.log(Obj.instance);


반응형
Posted by 힘없는염소