값을 은닉하기 위해, 클로저 공간을 만든다.
외부에서 접근할 수 없지만 사용할 수 있게 하고 싶다.
그래서 이 값이 연결된 함수들을 return을 이용해서 함수 밖으로 빼낸다.
함수 안에서는 밖에것도 접근이 가능해서, 얘네를 리턴으로 밖으로 빼줘도 여전히 연결이 가능하다.
그래서 이렇게 폐쇄된 공간을 만든게 모듈 패턴.
function Person() {
let age = 35;
return {
getAge: function(){return age},
setAge: function(data){age = data}
}
}
const person = Person();
console.log(person.getAge());
얘는 인스턴스를 만들기 위한 함수
값이나 프로토타입을 상속받는 새로운 자식이다.
new라는 키워드. 인스턴스를 만드는데, 생성자 함수의 this가 가르키는 것을 인스턴스로 바꾼다.
원래는 자신을 호출한 객체를 가르키는데, 인스턴스를 가르키게 된다.
2015이전에는 클래스를 만드는 방법이었음
생성자 함수는 대문자로 시작.
생성자 함수에서의 this는 인스턴스를 가르킨다.
function PersonType() {
this.age = 35;
}
PersonType.prototype.getAge = function() {
return this.age;
}
const instancePerson = new PersonType();
console.log(instancePerson.getAge());
function PersonType2() {
let age = 25;
function innerPersonType() { }
innerPersonType.prototype.getAge = function() {
return age;
}
return innerPersonType;
}
const Person3 = PersonType2();
const person3 = new Person3();
console.log(person3.getAge());
폐쇄된 공간 만들려고 안에 함수를 썼는데, 리턴함수로 밖으로 뺐는데,
그 과정을 즉시실행함수로 하나 거른거다. 어차피 실행했어야 되니까 처음할 때부터 실행해버리자!
const PersonType3 = (function PersonType2() {
let age = 25;
function innerPersonType() { }
innerPersonType.prototype.getAge = function() {
return age;
}
return innerPersonType;
})();
const personType3 = new PersonType3();
console.log(personType3.getAge());
당장 많은 지식을 넣으려고 하다보니, 취업에 대한 생각이 저 멀리 가버리는 것 같다. 아직 준비가 안 됐다고 생각하면서 미루게 된다. 물론 실제로도 준비가 안 된 것은 맞지만, 할 수 있는 만큼이라도 조금씩은 준비를 해야겠다.
고칠점