var Dog = function(){};
Dog.prototype.bark = function(){
return 'woof';
};
var Spitz = function(){};
Spitz.prototype = new Dog();
Spitz.prototype.bark = function(){
return 'woof woof'; //더 시끄러움.
};
var dog = new Spitz();
// prototype chain을 이용 해서 OOP 구현
console.log(dog instanceof Dog); //true 대체가능성
console.log(dog.bark()); //woof woof 내적동질성
var Parent = function(){};
Parent.prototype.test = function(){return 'parent';};
var Child = function(){};
Child.prototype = new Parent();
Child.prototype.test2 = function(){return this.test() + 'child';};
// child객체가 부모의 test() 메소드를 사용하려면
// 본인은 test2()와 같이 부모에 정의된 이름을 피해야만 가능
// 체이닝상 본인으로 부모 기능을 가려버리는 경우가 생긴다
var child = new Child();
child.test2(); //parentchild;
const Parent = class{
test(){return 'parent';}
};
const Child = class extends Parent{
test(){return super.test() + 'child';}
};
// class 로 구현하고 extens로 상속받고 super 를 이용하면 부모 클래스 이름 같아도 상관없다
const child = new Child();
child.test(); //parentchild
참고