Prototype

Seunghyunkim1·2020년 7월 3일
0

프론트엔드

목록 보기
4/8

프로토타입 객체지향을 지탱하고 있는 개념
자바스크립트를 일반적인 객체지향과 구분지을수 잇는 개념

프로토타입을 통해서 자스는 상속을 할수잇게된다

생성자

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나옴

생성자(constructor) feat. new

객체를 생성하는 함수 (new)

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

Prototype chain

서로 상속된다
약간, 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

Prototype 쓰는 이유?

0개의 댓글