이 대신 원하는 :
function Man(name) {
Human.call(this, name, "Male");
}
그 코드는 단지 전화를하려는 것 같다
무엇을 부모의 생성자 Human
은 프로토 타입 상속입니다. 위 코드는 Human
의 생성자를 가져와 this
- 새 Man
개체에 적용합니다.
코드를 선 Man.prototype = new Human(name, "Male")
이 Man
의 프로토 타입 새로운 남자가을 만들 때마다 변화
무엇. 뿐만 아니라 프로토 타입 객체를 다시 할당하기 때문에 완성 된 객체는 이후 할당 된 객체에만 적용됩니다. 즉, 첫 번째 객체가 아닙니다. 따라서 m.name
은 정의되지 않습니다. 위의 내 코드에서와 같이 부모의 생성자를 호출하는 것이
적절한 프로토 타입 상속
참고 하지 원인 Man
자동 Human.prototype
에 할당 된 방법을 상속하는 것입니다. 이 작업을 수행하는 가장 좋은 방법은 Human.prototype
을 Man.prototype
에 복제하지만 모든 생성자 외부에 복제하는 것입니다. 이처럼 :
function Man(name) {
Human.call(this, name, "Male");
}
function inherit(parent, child) {
if (Object.create) child.prototype = Object.create(parent.prototype);
else {
for (var key in parent.prototype) {
if (!parent.prototype.hasOwnProperty(key)) continue;
child.prototype[key] = parent.prototype[key];
}
}
}
inherit(Human, Man);
이 오히려 자세한 보일 수 있으며, 대안이 할 수 있습니다 :
Man.prototype = new Human('no name', 'Male');
어떤 을 작동하지만, 우리가 강제하고 있기 때문에 원치 않는 부작용이 발생 더플 이름을 prototype
에 할당하면 Human
에 대한 생성자가 프로토 타입을 할당하기위한 추가 시간을 호출하게됩니다. 이 경로를 따라 가면 나중에 에 속성을 할당하는 것 이상의 작업을 수행하기 위해 Human
생성자를 변경해야합니다.
메소드는 서브와 서브에서 정의되어야합니까? 자바 스크립트를 사용하여 고전적인 상속의 완전한 예제를 보여줄 수 있습니까? – Sam