객체지향이라고 하면 클래스, 객체, 캡슐화, 상속, 다형성을 떠올릴 수 있습니다. 책 "javaScript Advanced 프로그래밍"(인민우편통신 출판사, Cao Li 및 Zhang Xin 번역. 영문 이름은 Professional JavaScript for Web Developers)에 설명된 내용이 비교적 자세합니다. JavaScript에서 클래스를 정의하는 다양한 방법을 살펴보겠습니다.
1. 팩토리 메소드
JavaScript에서 자체 클래스와 객체 생성을 마스터해야 합니다. 우리 모두는 다음 코드와 같이 객체가 생성된 후 JavaScript에서 객체의 속성을 동적으로 정의할 수 있다는 것을 알고 있습니다.
new 키워드를 사용하는 것은 사람들의 마음 속에 깊이 뿌리내려 있기 때문에 위의 방법을 사용하여 정의할 때 항상 어색함을 느끼고 호출할 때마다 새로운 속성과 기능이 생성되므로 기능적으로 실용적이지 않습니다. 생성자 클래스의 형식적 정의를 살펴보겠습니다.
2. 생성자
이 방법은 약간 팩토리 함수와 비슷해 보입니다. 구체적인 성능은 다음과 같습니다.
3. 프로토타입 제작 방법
객체의 프로토타입 속성을 사용하면 새로운 객체 생성이 의존하는 프로토타입을 볼 수 있습니다. 방법은 다음과 같습니다.
//json을 사용하여 프로토타입 정의를 단순화할 수 있습니다.
Car.prototype =
{
색상: "red",
문: 4,
운전자: ["Tom", "Jerry",'safdad'],
showColor : function() {
Alert(this.color); 다음으로 객체의 프로토타입 속성을 통해 Car 객체의 속성을 정의하는 속성을 추가합니다. 이 방법은 좋지만 문제는 Car 객체가 Array 포인터를 가리킨다는 것입니다. 두 Car 객체 모두 동일한 Array 배열을 가리키고 있습니다. 한 객체 car1이 속성 객체(배열 Array)의 참조를 변경하면 다른 객체 car2도 마찬가지입니다. 속성 객체(배열)의 참조를 변경합니다. 동시 변경은 허용되지 않습니다.
동시에 이 문제는 프로토타입이 초기화 매개변수를 사용할 수 없어 생성자가 정상적으로 초기화되지 않는다는 사실에서도 나타납니다. 이를 해결하려면 하이브리드 생성자/프로토타입 패턴이라는 또 다른 방법이 필요합니다.
생성자와 프로토타입을 함께 사용하면 클래스를 정의하는 것이 매우 편리합니다.
코드 복사
이 방법은 실제로 매우 친숙해야 하지만 Java의 구문에 비해 약간 부조화적이고 지저분해야 합니다. C의 경우 그다지 번거롭다고 느끼지 않지만 C를 개발할 때 R&D 인력은 일반적으로 JavaScript를 사용하는 경우가 거의 없습니다. J2EE R&D 인력 여러분, 이 접근 방식은 항상 좀 어색합니다. 항상 친근한 패키지가 아닌 것 같은 느낌이 듭니다. 사실, 시각적 캡슐화 효과를 얻고 싶다면 이 방법의 효과를 얻으려면 개인적으로 생각합니다. 그것은 더 문제입니다. 이것이 바로 다이나믹 프로토타이핑 방법이다.
5. 동적 프로토타입
다른 언어 사용에 익숙한 개발자의 경우 혼합 생성자/프로토타입 접근 방식을 사용하는 것이 덜 조화롭게 느껴질 수 있습니다. 결국 대부분의 객체지향 언어는 클래스를 정의할 때 속성과 메서드를 시각적으로 캡슐화합니다. 다음 C# 클래스를 고려하세요.
public Car(string color, intdoors, int mpg) //constructor
{
this.color = color;
this.doors =doors;
this.mpg = mpg;
}
public void showColor() //method
{
Console.WriteLine(this.color);
}
}
동적 프로토타입 방법의 기본 아이디어는 하이브리드 생성자/프로토타입 접근 방식과 동일합니다. 즉, 비기능적 속성은 생성자 내에서 정의되고, 기능적 속성은 프로토타입 속성을 사용하여 정의됩니다. 유일한 차이점은 객체 메서드가 할당되는 위치입니다. 다음은 동적 프로토타입 메소드로 재작성된 Car 클래스입니다.
6 혼합공장 방식
이 방법은 일반적으로 이전 방법을 적용할 수 없는 경우 해결 방법입니다. 그 목적은 다른 종류의 객체의 새 인스턴스를 반환하는 가짜 생성자를 만드는 것입니다. 이 코드는 팩토리 함수와 매우 유사해 보입니다.
코드 복사
showColor: function() { Alert(this.color) }
} Car.showColor();