DBILITY

javascript constructor function 본문

front-end & ui/javascript

javascript constructor function

DBILITY 2021. 10. 29. 16:57
반응형

이거 보고 광고 한번 안 누른 이는 삼대가 재수가 없을지어다!ㅋㅋ

naming convention이 첫 글자는 대문자여야 한다. 그러라고 한다. 생성할 때 new를 사용.

object내에 method를 정의하면 생성될 때마다 각각 call stack, heap을 할당한다.

prototype에 property또는 method를 추가하면 같은 주소를 공유하므로, 불필요한 메모리 낭비도 줄일 수 있다?

결국 함수의 원형을 조작하는게 되어 상속개념과 같게 되는 것인가?

작성해 보니 객체 생성 후에 추가해도 추가가 되는 것인지, 이것도 hoisting이 되는 것인지 실행에 문제가 없다.

m1.sayGoodBye(); 부분을 prototype추가 전으로 올려보니 오류가 난다. hoisting이 안되나 보다.

__proto__는 부모를 가리킨다. 강제로 할당하면 바꿀 수 도 있다.

너무 깊은 것을 알려하면 몸이 망가진다. 그냥 필요할 때 알아보자. 결과는 그림 1과 같다.

function log(...args) {
    args.forEach(function (v, i) {
        console.log(v);
    })
}

function FnObjGen(name, age = 14) {
    this.name = name;
    this.age = age;
    this.selfIntroduce = function () {
        log(`안녕하세요. 저는 ${this.name}이고 ${age}살 입니다.`);
    };
}

var m1 = new FnObjGen('홍길동');
var m2 = m1;
var m3 = new FnObjGen('아버지', 30);

log(m1, m2, m1 === m2, m3, m1 === m3);

m1.selfIntroduce();
m2.selfIntroduce();
m3.selfIntroduce();

FnObjGen.prototype.goodbyeWord = '잘가~떠나지마!';
FnObjGen.prototype.sayGoodBye = function () {
    log(`${this.goodbyeWord} 나 잘했죠?`);
}

m1.sayGoodBye();
m2.sayGoodBye();
m3.sayGoodBye();

log(m1.__proto__, m2.__proto__, m3.__proto__);

m2.__proto__ = m3;

log(m1.__proto__, m2.__proto__, m3.__proto__);

그림 1
ex6_009.html
0.00MB

반응형
Comments