EMCA262 사양에는 클래스 개념이 없습니다. js의 새로운 기능은 단지 C 및 Java와 비슷하게 보이게 만듭니다. 여기에 언급된 쓰기 클래스는 단지 js 코드 스타일을 작성하는 것입니다.
1. 생성자 방식
/* *
* Person 클래스: 사람을 정의하고 속성 이름과 getName 메소드를 가집니다.
* @param {String} name
*/
function 사람(이름) {
this.name = name;
this.getName = function() {
return this.name; }
객체를 구성하려면 일부 매개변수를 구성해야 하고 매개변수를 클래스에서 이에 할당해야 하기 때문에 이 스타일은 Java를 작성한 우리에게는 다소 익숙합니다. 그러나 Java와의 차이점은 JS가 클래스를 정의하기 위해 함수를 사용하고 매개변수는 유형을 정의할 필요가 없다는 것입니다.
클래스가 작성되었습니다. 몇 가지 개체를 만들어 보겠습니다.
var p1 = new Person("Jack");
var p2 = new Person("Tom")
console.log(p1 instanceof Person);//true
console.log(p2 instanceof Person);//true
또한 콘솔 출력은 p1과 p2가 실제로 Person 클래스의 객체 인스턴스임을 증명합니다.
이 방법의 장점은 매개변수에 따라 서로 다른 객체 인스턴스를 생성할 수 있다는 것입니다. 단점은 각 인스턴스 객체가 생성 중에 getName 메소드 버전을 생성하여 메모리가 낭비된다는 것입니다.
물론 숙련된 프로그래머는 외부 함수를 사용하여 클래스 메소드를 대체하므로 각 객체가 동일한 메소드를 공유합니다. 다시 작성한 클래스는 다음과 같습니다.
// 외부 함수
function getName() {
return this.name;
}
function Person(name) {
this.name =
this.getName = getName;// 여기 주목하세요
}
ㅋㅋㅋ 어떤 분들은 코드 스타일이 자바만큼 컴팩트하지 않다고 생각하실 수도 있어요. 그러나 실제로 메모리 소비를 줄일 수 있습니다.