2013-01-31 2 views
8

JavaScript에 막 들어서 객체 지향 동작에 의아해합니다. 난 을 x, y 회원으로 만들고 x, y, z 개의 회원으로 Point3D 클래스로 확장하려고했습니다.JavaScript에서 "superclass"생성자를 호출하십시오.

class Point2D 
{ 
    int x, y; 
    public Point2D(int x, int y) { this.x = x; this.y = y; } 
} 
class Point3D : Point2D 
{ 
    int z; 
    public Point3D(int x, int y, int z) : base(x, y) { this.z = z; } 
} 

나는 물건을 많이 읽을 수 있지만 난 정말 내가 무엇을 찾고 찾을 수가 없습니다 : 내가 달성하기 위해 노력하고있어 동작은 같은의는 C#으로 그것을 생각한 무언가이다. 는 여기에 지금까지 최대 왔어요 내용은 다음과 같습니다 분명히 잘못

function Point2D(x, y) { this.x = x; this.y = y; } 
Point2D.prototype.constructor = Point2D; 
function Point3D(x, y, z) { Point2D.prototype.constructor.call(this); this.z = z; } 
Point3D.prototype = new A(); // see latter explanation 
Point3D.prototype.constructor = B; 
var p = new Point3D(10, 20, 30); 

합니다.

지금, 나는 Point3D.prototype = new A(x, y) 같은 것을해야 알고 있지만 나는 고정x, y 좌표와 변수 z와 프로토 타입을 생성하고 싶지 않아요. 매우 간단해야하지만, 나는 그것을 얻지 못하고 있습니다. 수퍼 클래스 생성자를 호출하거나 제대로 동작하지 못하는 것 같습니다.

답변

13

JavaScript의 프로토 타입 상속은 원하는 다형성 생성자를 수행 할 수있는 여러 가지 유연한 방법을 제공합니다. 특정 예에서,이 같은 싶지 :

function Point2D(x, y) { 
    this.x = x; 
    this.y = y; 
} 

function Point3D(x, y, z) { 
    Point2D.call(this, x, y); 
    this.z = z; 
} 

명시 적으로 prototypeconstructor 설정과 소란 여기에 엄격하게 할 필요가 없습니다. (실제로는 객체를 사용하여 "한 번에"프로토 타입을 만들 때만 필요합니다.)

객체 지향 JavaScript에 대한 자세한 내용은 Nicholas Zakas의 의 원칙을 권장합니다. JavaScript의 객체 지향 프로그래밍 (전자 책) 또는 다른 책의 프로토 타입 및 상속에 대한 설명 웹 개발자 용 전문 JavaScript.

+0

정말 고마워요. 나는 열매를 맺고 있었고, 그렇게 간단했습니다! 적어도 저 책 중 적어도 하나에 책을 읽어 줄 것입니다. – Cancer

관련 문제