우리가 object, array 만들어도 prototype이 없다.
var obj = {name:'is'}
console.log(obj.prototype)// undefined
var arr = [1,2,3]
console.log(arr.prototype)// undefined
부모로부터 생성된 자식 object들은 __proto__라는 속성이 있습니다.
이걸 출력해보시면 부모의 prototype이 출력됩니다.
그래서 __proto__는 부모의 prototype'과 같은 의미입니다.
function 기계(){
this.name = 'Kim';
this.age = 30;
}
var 사람 = new 기계();
console.log(사람 .__proto__);
console.log(기계.prototype);
/*
사람.__proto__
기계.prototype
각각 출력해보시면 똑같은게 나온다.
"__proto__는 부모 prototype을 의미한다"
그냥 __proto__는
내 부모 유전자가 뭔지 유전자 검사하고 싶을 때
쓸 수 있는 그런 값이라고 생각하자
*/
child.__proto__ = parent
사용 방법
var parent = {name : 'kim'}
var child = {};
child.__proto__ = parent;
console.log(child.name)// kim
이런식으로도 상속기능 구현 할 수 있을것 이다.
Q .obj1을 obj2의 부모로 강제 등록해주면 obj1.prototype이 있을 까?
var obj1 = { name : 'kim'}
var obj2 = {}
obj2.__proto__ = obj1;
// 부모로 등록해줬으면 혹시 prototype이 찍힐까?
console.log(obj1.prototype) // undefined 안나옴;
A. undefined 나온다. 역시 constructor에서만 뿅 생기나봄
Q. 왜 안나오지??
var obj1 = { name : 'kim'}
var obj2 = {}
obj2.__proto__ = obj1;
obj1.age = 30;
console.log(obj2) // {} 빈 객체가 나온다. 어?? 잠만..
// obj2.name이라고 한번 해보자
console.log(obj2.name) // 'kim'
console.log(obj2.age) // 30
A. obj2가 안나오지만 obj2.name || obj2.age
를 console 출력 하면 나온다.
이유는