프로토타입 객체지향을 지탱하고 있는 개념
자바스크립트를 일반적인 객체지향과 구분지을수 잇는 개념
프로토타입을 통해서 자스는 상속을 할수잇게된다
생성자
function Ultra(){}
Ultra.prototype.ultraProp = true;
function Sub(){}
Sub.proptotype = new Super();
var o = new Sub(); //Sub객체에는 ultraProp이 존재x, but 부모의 부모에 존재, 자동적으로 찾으러다닌다.
console.log(o.ultraProp) //true나옴
function Person(){} var p = new Person(); //함수에 new를 붙이면 객체를 만들어낸다.
function Person(name){
this.name =name;
this.introduce = function(){
return 'My name is' + this.name;
}
}
var p1 = new Person('kim');
function Super(){} Super.prototype = new Ultra(); //상속불가능 function Sub(){} Sub.proptotype = Super.prototype //super.prototype값에 영향을 주기때문에 sub이라는 자식에게 상속되는 값이 부모에게도 영향을 주기때문에 //이런식으로 생성을 해줘야함 function Sub(){} Sub.proptotype = new Super(); //이런식으로 복제?본을 사용
super를 sub가 상속받고싶다면,
객체를 만들때 , 그객체가 가지고잇어야하는 메소드, 데이터, 프로퍼티등
로직이 담겨서 저장되어 있는곳 ---> prototype라는 프로퍼티에 저장되어있는 객체(객체의 원형)
순서대로 콘솔이 쳐보자 - prototype 프로퍼티에 저장되있는 객체의 name에 값을준것
function func(){}
func.prototype
new object();
func.prototype.name = 'hi'
var o = new func();
o
서로 상속된다
약간, scope chain과 느낌이 비슷하다?
function Ultra(){}
Ultra.prototype.ultraProp = true;
function Super(){}
Super.prototype = new Ultra();
function Sub(){}
Sub.proptotype = new Super();
var o = new Sub();
o.ultraProp = 1;
console.log( o.ultraProp) //1
//o라는 객체가 ultraProp라는 값을 가지고 잇는지 확인하다.
//위에서 값을 지정해줬기떄문에 1
//만약 super에서 Sub.prototype.ultraProp값이 있다면 그 값을 리턴
function Sub(){}
var s = new Super();
s.ultraProp = 3;
Sub.prototype = s
var o = new Sub();
console.log( o.ultraProp) //3 이경우도 마찬가지 chain