2017-05-03 2 views
0

최근에 자바 스크립트를 배우기 시작했고 몇 가지 중요한 개념을 고수하려고합니다. 지금까지 내 이해에 따라 자바 스크립트에는 클래스가 없으므로 클래스 대신 생성자 함수를 사용하여 객체의 청사진을 만듭니다. 예 : 우리는 그 클래스 객체에 대한 청사진을 만드는 클래스를 가지고 있기 때문에자바 생성자 함수 대 Typescript 클래스

// javascript code 
var Car = function() { 
    // this is a private variable 
    var speed = 10; 

    // these are public methods 
    this.accelerate = function(change) { 
    speed += change; 
    }; 

    this.decelerate = function() { 
    speed -= 5; 
    }; 

    this.getSpeed = function() { 
    return speed; 
    }; 
};  
// typescript code 
class Car { 

    public speed: number = 10; 

    public acceleration(accelerationNumber: number): void { 
    this.speed += accelerationNumber; 
    } 

    public decelerate(decelerateNumber: number): void { 
    this.speed += decelerateNumber; 
    } 

    public getSpeed(): number { 
    return this.speed; 
    } 
} 

위의 타이프 스크립트 코드는 훨씬 더 의미가 있습니다. 그러나 Javascript에서이 청사진은 기능으로 생성됩니다. 그래서 Javascript에서 생성자 함수의 의미는 클래스가 Typescript/Java/etc에서하는 것과 같은 일을합니다.

+1

두 개는 정확히 동일하지 않습니다. Javascript 버전은'prototype'을 사용하여 메소드를 정의하고'this.speed'에'speed '를 넣어야합니다. – deceze

+0

예. 당신의 "클래스"는 int function() {}이 변형되어 new라는 키워드로 호출 될 것입니다. 이것은 문법 설탕과 같은 매끄러운 표현입니다. 그러나 ES6 수업에서는 표준으로 제공 될 것입니다 (설탕으로도 사용 가능). https://googlechrome.github.io/samples/classes-es6/ – Vitalii

+0

"자바 클래스에는 클래스가 없습니다"- https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Classes Are 당신은 말 그대로 또는 자바 스크립트 클래스의 구현이 다른 언어와 구조적으로 다르다는 것을 말하는가? – Zze

답변

1

그 타이프 라이터 클래스에 대한 올바른 동등은 다음과 같습니다

var Car = function() { 
    this.speed = 10; 
}; 

Car.prototype.accelerate = function (change) { 
    this.speed += change; 
}; 

Car.prototype.decelerate = function() { 
    this.speed -= 5; 
}; 

Car.prototype.getSpeed = function() { 
    return this.speed; 
}; 

Car 기능, 생성자 함수는, constructor()class에 기본적으로 무엇인가; 그것은 새로운 인스턴스를 초기화하기 위해 실행되는 것이다. prototype의 모든 기능은 모든 인스턴스가 공유하는 클래스 내에서 정의 된 다른 메소드입니다.

+0

감사합니다. @deceze! 그러나 생성자 함수 'Car'가 있다면 클래스는 어디에 정의되어 있습니까? 왜냐하면 내 지식에 따라 생성자 함수는 클래스의 새 객체를 만드는 데 사용되기 때문입니다. 이 경우 정의 된 클래스는 어디에 있습니까? – Aiguo

+2

그렇지 않습니다. 마술은'new' 키워드에 있습니다. 새로운 객체를 생성하고, 생성자 함수를 사용하여 초기화하고, 프로토 타입에서 상속받은 것을 보장합니다. 이것은 대부분의 다른 OO 언어에서 일어나는 것과 크게 다르지 않고'class' 키워드를 사용하는 구문으로 표현되지 않습니다. 소시지가 자바 스크립트로 어떻게 만들어 지는지 좀 더 자세하게 볼 수 있습니다. – deceze

+2

프로토 타입 개체는 템플릿으로 작동합니다. https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Objects/Object_prototypes – Allan

관련 문제