JavaScript는 객체 기반이므로 모든 요소를 객체로 간주할 수 있습니다. 그러나 유형과 객체는 다릅니다. 이 기사에서는 유형과 객체의 몇 가지 특성을 논의하는 것 외에도 더 중요하게는 훌륭하고 재사용 가능한 유형을 작성하는 방법을 연구합니다. 결국, 널리 사용되는 스크립팅 언어인 JavaScript가 잘 캡슐화되어 거대한 유형 라이브러리를 형성할 수 있다면 재사용에 매우 의미가 있을 것입니다.
인터넷에 프로토타입에 대한 기사가 많이 있지만 핵심 아이디어를 이해한 적이 없습니다. 마침내 많은 예제 코드를 작성한 후에 프로토타입은 유형에만 사용할 수 있다는 것을 깨달았습니다.
다음은 유형 및 객체에 대한 몇 가지 예입니다. 예를 읽고 나면 유형과 객체 간의 연결을 더 쉽게 이해할 수 있습니다.
| 예제 코드 | 설명하다 | |
| 1 | Object.prototype.Property = 1; Object.prototype.Method = function (){ 경고(1);}var obj = new Object();alert(obj.Property);obj.Method(); | 유형에 대한 프로토타입을 사용하여 유형에 동작을 추가할 수 있습니다. 이러한 동작은 해당 유형의 인스턴스에만 나타날 수 있습니다. JS에서 허용되는 유형은 Array, Boolean, Date, Enumerator, Error, Function, Number, Object, RegExp, String입니다. |
| 2 | var obj = 새로운 객체(); obj.prototype.Property = 1;//오류//Errorobj.prototype.Method = function(){ 경고(1);} | 인스턴스에서는 프로토타입을 사용할 수 없습니다. 그렇지 않으면 컴파일 오류가 발생합니다. |
| 3 | Object.Property = 1;Object.Method = function(){ 경고(1);}alert(Object.Property);Object.Method(); | 유형에 대한 "정적" 속성과 메서드를 정의하고 해당 유형에서 직접 호출할 수 있습니다. |
| 4 | Object.Property = 1;Object.Method = function(){ Alert(1);}var obj = new Object();alert(obj.Property);//Errorobj.Method();//오류 | 인스턴스는 유형의 정적 속성이나 메서드를 호출할 수 없습니다. 그렇지 않으면 개체 정의되지 않음 오류가 발생합니다. |
| 5 | function Aclass(){this.Property = 1;this.Method = function(){ Alert(1);}}var obj = new Aclass();alert(obj.Property);obj.Method(); | 이 예는 JavaScript에서 유형을 정의하는 일반적인 방법을 보여줍니다. |
| 6 | function Aclass(){this.Property = 1;this.Method = function(){ 경보(1);}}Aclass.prototype.Property2 = 2;Aclass.prototype.Method2 = function{ 경보(2);}var obj = new Aclass();alert(obj.Property2);obj.Method2(); | 프로토타입을 외부에서 사용하여 사용자 정의 유형에 속성과 메서드를 추가할 수 있습니다. |
| 7 | function Aclass(){this.Property = 1;this.Method = function(){ Alert(1);}}Aclass.prototype.Property = 2;Aclass.prototype.Method = function{ Alert(2);}var obj = new Aclass();alert(obj.Property);obj.Method(); | 사용자 정의 유형의 속성이나 메서드는 프로토타입을 통해 외부에서 변경할 수 없습니다. 이 예에서 볼 수 있듯이 호출된 속성과 메서드는 여전히 초기 정의의 결과입니다. |
| 8 | function Aclass(){this.Property = 1;this.Method = function(){ 경고(1);}}var obj = new Aclass();obj.Property = 2;obj.Method = function(){ 경고( 2);}경고(obj.Property);obj.Method(); | 개체의 속성을 변경할 수 있습니다. (확실합니다.) 객체에 대한 메소드를 변경할 수도 있습니다. (일반적인 객체지향 개념과 다름) |
| 9 | function Aclass(){this.Property = 1;this.Method = function(){ 경고(1);}}var obj = new Aclass();obj.Property2 = 2;obj.Method2 = function(){ 경고( 2);}경고(obj.Property2);obj.Method2(); | 객체에 속성이나 메소드를 추가할 수 있습니다. |
| 10 | function AClass(){ this.Property = 1; this.Method = function() { 경고(1); }}function AClass2(){ this.Property2 = function() { 경고(2); }}AClass2.prototype = 새로운 AClass();var obj = 새로운 AClass2();alert(obj.Property);obj.Method();alert(obj.Property2);obj.Method2(); | 이 예에서는 한 유형이 다른 유형에서 상속되는 방법을 보여줍니다. |
| 11 | function AClass(){ this.Property = 1; this.Method = function() { 경고(1); }}function AClass2(){ this.Property2 = function() { 경고(2); }}AClass2.prototype = 새로운 AClass();AClass2.prototype.Property = 3;AClass2.prototype.Method = function(){ Alert(4);}var obj = new AClass2();alert(obj.Property);obj.Method(); | 이 예제에서는 하위 클래스가 상위 클래스의 속성이나 메서드를 재정의하는 방법을 보여줍니다. |
・예 2: 프로토타입 사용 제한
・예 3: 유형에 정적 멤버를 정의하는 방법
・예 7: 재정의된 유형의 멤버에 대한 프로토타입 제한
・예 10: 한 유형을 다른 유형에서 상속하는 방법
・예시 11: 하위 클래스에서 상위 클래스의 멤버를 재정의하는 방법
JavaScript가 구현할 수 있는 객체 지향 기능은 다음과 같습니다.
・공공분야
・공개 방식
·사전
・프라이빗 메소드(프라이빗 필드)
・메서드 오버로드
·건설자
·이벤트
・단일 상속
・하위 클래스는 상위 클래스의 속성이나 메소드를 재정의합니다(재정의).
・정적 속성 또는 메서드(정적 멤버)