const superObj = { superVal: "super" };
const subObj = { subVal: "sub" };
subObj.__proto__ = superObj;
//subObj가 superObj를 상속받는다
subObj.superVal;
// => super
subObj.superVal = "sub";
const subObj = Object.create(superObj);
subObj.superVal = "sub";
prototype
1. class Person
- prototype => Person`s prototype을 가르킴
2. Person`s prototype
- constructor => Person 이다
- sum 메소드 보유
3. 인스턴스 kim
- proto => Person`s prototype을 가르킴
=>kim.age를 호출할때 kim에 age 메서드가 없으면 proto으로 연결된 prototype으로 가서 메서드가 존재하는지 확인
class의 상속
super() => 상속 받은 뒤 부모 보다 더 많은 기능을 갖고 싶을 때 super로 부모의 기능을 상속받고 추가할 기능만 따로 써주면 됨
class PersonPlus(자식) extends Person(부모) {
constructor (name, first, second){
super(name, first) // 부모에게서 상속받을 속성
this.second = second //자식의 추가 속성
}
sum(){
return super.sum() this.second
//부모의 sum을 써쓰고 자식기능 second추가됨
}
}
function PersonPlus(자식) (name, first, second){
Person.call(this, name,first);
this.third = third;
}
//PersonPlus.prototype.__proto__ = Person.prototype은 아래와 같다
이것은 proto가 부모의 프로토타입을 가르키는것
PersonPlus.prototype = Object.creat(Person.prototype);
//하지만 이렇게 하면 proto와 다른점은 부모의 프로토타입을 가르키는 새로운 객체가 생성되는 것이다.
PersonPlus.prototype.constructor = PersonPlus;
// 그럼 자식프로토타입의 constructor가 부모가 되기 때문에 constructor를 자식으로 바꿔주는 작업이 필요하다
원시적인 상속 방법
function PersonPlus(자식) (name, first, second){
Person.call(this, name,first);
this.third = third;
}
1. call의 첫번째 인자로 this를 줘서 this가 가르키는 것이 PersonPlus가 되도록함
2. 나머지 인자로 상속받을 속성값을 넣어줌
=> 하지만 이것은 자식안에서 부모를 호출해 준 것이지 아직 상속을 받은 것은 아님
//PersonPlus.prototype.__proto__ = Person.prototype은 아래와 같다
//이것은 proto가 부모의 프로토타입을 가르키는것
PersonPlus.prototype = Object.creat(Person.prototype);
//하지만 이렇게 하면 proto와 다른점은 부모의 프로토타입을 가르키는 새로운 객체가 생성되는 것이다.
PersonPlus.prototype.constructor = PersonPlus;
// 그럼 자식프로토타입의 constructor가 부모가 되기 때문에 constructor를 자식으로 바꿔주는 작업이 필요하다
proto로 prototype을 연결하면 constructor가 바뀌며 연결이 되지만
Object.creat는 새로운 객체를 반환하며 constructor가 바뀌지 않기때문에 연결 후 다시 constructor을 바꿔줘야 한다
한가지 주의할 점은 이렇게 constructor를 바꿔주는 작업 위쪽에 자식메서드가 위치하면 그 메서드는 없어지게됨
때문에 자식 메서드들은 constructor바꿔주는 코드 아래 위치해야함
1. 상속받을 자식 객체.proto = 부모객체
2. 상속받을 자식 객체= object.create (부모객체)
var kim = {
name: "kim",
age: 2
};
var lee = Object.create(kim);
console.log(lee.kim);
var kim = {name:'kim', first:10}
function sum(인자){return 인자 + this.first}
sum.call(kim, 매개변수로 넣어줄 값)
var kim = {name:'kim', first:10}
function sum(인자){return 인자 + this.first}
sum.call(kim, 매개변수로 넣어줄 값)
=> sum의 this를 kim으로 바꿈
sum.call(바꿀 this의 값, 함수의 매개변수로 들어갈 값)
var kimSum = sum.bind(kim, "인자");
this가 kim으로 고정된 새로운 함수 생성 (두번째 인자는 역시 매개변수로 들어갈 값)
참고 : 생활코딩 강좌