2013-04-08 3 views
1

나는 html 5 캔버스의 도형을 그리는 데 도움이되는 작은 도형 객체를 만들기 위해 노력하고 있습니다. 지금까지 나는 가지고있다.도형 클래스가 자바 스크립트입니까?

var Shape = function (config) { 

    this.initialize(config); 
}; 

var proto = Shape.prototype; 

proto.initialize = function (config) { 

    this.x = config.x || 0; 
    this.y = config.y || 0; 
    this.width = config.width || 0; 
    this.height = config.height || 0; 
    this.color = config.color || false; 
}; 

/* 
    Circle 
*/ 

var Circle = function (config) { 

    this.initialize(config); 
}; 

proto = Circle.prototype; 

proto = new Shape(); 

하지만 작동하지 않는 것 같습니다! 나는 그렇게 새로운 동그라미를 만들기 위해 전화 할 때;

var s1 = new Circle({x: 10, y: 10, width: 10, height: 10, color: "red"}); 

나는 다른 모양을 설정하고 모양이된다 몇 가지 일반적인 속성을 할당하는 데 도움이되는 기본 클래스 Shape을 만들 수있는 방법 등과 같은 Circle, Rect 요법? 나는 코드가 왜, 내가 그것을 더 나은 방법을 설명하시기 바랍니다 오프 방법입니다 그래서 만약 자바 스크립트를 배우려고 노력하고

,

감사합니다.

답변

3

proto = new Shape();

이것은 새로운 Shape 인스턴스를 참조 할 수있는 proto 변수를 지정합니다.
Circle.prototype에 영향을 미치지 않습니다.이 변수는 이전에 참조 된 변수입니다. 당신은 아마 좋은 생각이 아니다 서클 프로토 타입을 초기화 할 Shape() 생성자를 실행하는


참고.
대신 생성자를 실행하지 않고, Shape.prototype을 상속하는 새로운 객체를 생성합니다

Circle.prototype = Object.create(Shape.prototype); 

이 코드를 작성할 수 있습니다.

+0

입니까? 주로 ES5를 구현하지 않는 브라우저가 관심을 가질 때 주로 이런 종류의 코드를 보게됩니다. –

+0

프로토 타입을 변수에 저장하는 것은 좋지 않은가요? – user2251919

+1

@ user2251919 개체는 참조로 전달됩니다. 'Circle.prototype' 객체에 대한 참조를'proto' 변수에 저장하고 있습니다. 'proto'에 새로운 객체를 할당하는 것은'Circle.prototype'에 영향을 미치지 않고'proto' 변수에 새로운 참조를 할당 할 것입니다. SLaks는 답변의 첫 번째 섹션에서 설명합니다. –

0

변경이 라인 :

proto = Circle.prototype; 

proto = new Shape(); 

와`으로 Circle.prototype = 새로운 Shape()`로 가능한 문제 무엇

Circle.prototype = new Shape(); 
관련 문제