function main()
{
this.one = 1;
}
main.prototype = {
display: function()
{
console.log(this.one);
return this;
}
};
function addition() {
main.call(this);
}
addition.prototype = new main;
addition.prototype.constructor = addition;
addition.prototype = {
add: function(x) {
this.one += x;
return this;
}
};
// addition.prototype.add = function(x)
// {
// this.one += x;
// return this;
// }
display = new addition;
display.add(3).add(5).display();
, 그것은 '9'를 로깅, 잘 작동합니다. 그렇지 않으면 위의 스 니펫을 실행하면 Firebug 1.4, Firefox 3.5에서 "display.add (3) .add (5) .display가 함수가 아닙니다"가 발생합니다.자바 스크립트 프로토 타입 상속 차이
두 세그먼트의 차이점은 무엇입니까? 난 항상 그들이 동일하다고 생각했거나 그 차이점에 대해 조언 해 주시고,/또는 어떻게 주석 처리 된 코드와 함께 작동시킬 수 있는지 생각해 보셨습니다.
또는 적어도 내가해야하는 키워드를 알려주고, 몇 시간 동안 맹목적으로 보았습니다.
감사합니다. 당신이 당신의 코드로 부모의 (주)의 프로토 타입을 덮어 쓰는 것처럼 보이는
아, 고마워! 이제는 의미가 있습니다. 이 문제에 관해 언급 한 첫 번째 사이트는 기억이 나지 않지만 다른 사이트 중 하나는 http://www.cristiandarie.ro/asp-ajax/JavaScriptPrototypeInheritance.html 입니다. 와우, 내가 찾은 모든 사이트 중에서, 가장 좋은 방법이 무엇인지 잘 모르는 가운데이 프로토 타입 상속의 모범 사례를 추천 할만한 사이트가 있습니까? –
나는 Chu가 정확하다고 믿는다 : addition.prototype = ... 당신이 앞에서 만든 main.prototype을 확실히 자르고있어 더 이상 디스플레이를 사용할 수 없다. 나는 또한 그 예가 이상하다는 것에 동의한다. 먼저, draco는 함수 생성자가 대문자를 사용하여 다른 사람들에게 호출 할 때 'new'를 사용해야 함을 나타냅니다. 내가 우연히 다음과 같이 말하면 : m = main() 나는 방금 전역 네임 스페이스를 clobbered했습니다! 고전적인 패턴을 가진 다른 실제 이슈들이 많이 있습니다 (그대로 맹 글링되었습니다). 제 예제를 여기에서보십시오 : http://github.com/roblevintennis/Testing-and-Debugging-JavaScript – Rob