JS 프로토 타입 상속에 대한이 비디오 설명 (https://www.youtube.com/watch?v=qMO-LTOrJaE)을보고있었습니다. 내가 이해하지 못하는 것이 있습니다. 설명해 드리죠Javascript Prototypal Inheritance - 개념을 정말로 이해
var Bear = function(type) { //PARENT
this.type;
this.hasFur = true;
}
Bear.prototype.kingdom = 'Animalia'; //ASSIGNING TO PARENT'S PROTOTYPE
var Grizzly = function(type) { //CHILD
this.species = 'Brown Bear';
}
Grizzly.prototype = Object.create(Bear.prototype); //INHERITING FROM PARENT
var grizzly1 = new Grizzly('grizzly');
console.log(grizzly1.hasFur); //prints undefined //members in parent's constructor not accessible
console.log(grizzly1.kingdom); //prints Animalia //however, members in parent's prototype is accessible
그러나 곧 당신이 부모에서뿐만 아니라 모든 것을 액세스 할 수있어 다음 그리즐리 생성자 라인,
var Grizzly = function(type){
Bear.call(this, type); //ADDED
this.species = 'Brown Bear';
}
를 추가 프로토 타입입니다
console.log(grizzly1.hasFur); //prints true
console.log(grizzly1.kingdom); //prints Animalia
그러나 n 아래의 방법은 하위 생성자에서 //Bear.call(this) 행이 없어도 부모가있는 모든 항목에 액세스 할 수있게합니다.
Grizzly.prototype = new Bear();
그래서이 모든 것을 진정으로 상속합니다. 누군가가이 행동이 무엇이고 왜 일어나는 지 설명 할 수 있습니까?
또한 자바 스크립트에서 상속하는 여러 가지 방법이 있습니다. 모범 사례와 그 이유를 고려해 볼 때 어느 것이 가장 좋습니다.
'Grizzly.prototype = new Bear();'를 사용하면'Bear.prototype'에서 상속받은 객체를 생성하기 위해 실제로 생성자를 호출하므로 새 객체에 정의 된 모든 속성이 있습니다. 생성자. 'Object.create (Bear.prototype)'을 사용하면 생성자로부터 부작용을받지 않고'Bear.prototype' *을 상속받은 객체를 생성 할 수 있습니다. 생성자에서 발생하는 부작용을 항상 원하지 않기 때문에'Object.create() '를 사용합니다. –
귀하의 마지막 단락이 너무 광범위하여 문의하십시오. –