웹 프론트엔드 JS 튜토리얼 함수를 통해 JavaScript에서 클래스 인스턴스를 정의하는 방법에 대한 자세한 설명

함수를 통해 JavaScript에서 클래스 인스턴스를 정의하는 방법에 대한 자세한 설명

Jul 21, 2017 pm 05:19 PM
javascript js 정의

먼저 예를 들어 설명하겠습니다.

function myClass() 
{ 
var id = 1; 
var name = "johnson"; 
//properties 
this.ID = id; 
this.Name = name; 
//method 
this.showMessage = function() 
{ 
alert("ID: " + this.ID + ", Name: " + this.Name); 
} 
} 
var obj1 = new myClass(); 
var obj2 = new myClass();
로그인 후 복사

함수의 정의는 실제로 클래스의 생성자와 동일하며 마지막 두 문장은 이 클래스의 인스턴스를 만드는 것입니다. 먼저 첫 번째 문장을 분석해 보겠습니다. var obj1 = new myClass(); 클래스의 인스턴스를 생성하기 위해 new를 사용할 때 인터프리터는 먼저 빈 객체를 생성합니다. 그런 다음 이 myClass 함수를 실행하고 이 포인터가 이 클래스의 인스턴스를 가리키도록 합니다. this.ID = id; 및 this.Name = name; 및 this.showMessage = function(){...}이 발생하면 이 두 속성과 이 메서드가 생성되고 변수 id와 name이 정의됩니다. 값 수준 함수는 이 두 속성과 이 함수 개체(shwoMessage)에 할당됩니다. 이 프로세스는 C#의 생성자와 유사하게 개체를 초기화하는 것과 동일합니다. 마지막으로 new는 이 객체를 반환합니다. 두 번째 문장을 보십시오. var obj2 = new myClass(); 실행 프로세스는 이전 문장과 동일합니다. 즉, 빈 객체를 만든 다음 myClass 함수를 실행하고 두 개의 속성과 메서드를 정의합니다.
위 분석에서 알 수 있듯이 위의 클래스 구현 방법은 함수 정의에서 클래스의 속성 메서드를 정의하는 것입니다. 단점이 있습니다. 위에 표시된 것처럼 이 클래스의 인스턴스를 두 개 이상 생성해야 하는 경우 이러한 속성은 여러 번 생성됩니다.
그러면 이런 상황을 피하는 방법은 무엇일까요? 프로토타입은 이름과 같은 프로토타입입니다. 각 함수에는 실제로 이 함수 개체의 멤버 컬렉션을 나타내는 하위 개체 프로토타입이 있습니다. 여기서는 클래스를 구현하기 위해 함수를 사용하므로 프로토타입은 실제로 클래스라고 말할 수 있습니다. 회원의. 프로토타입에 의해 정의된 속성과 메서드는 함수 생성자가 실행되기 전에 실행됩니다. 따라서 객체가 새로 생성되기 전에 프로토타입의 멤버가 실제로 실행되었습니다. 먼저 예제를 살펴보겠습니다.

function myClass() 
{ 
//构造函数 
} 
myClass.prototype = 
{ 
ID: 1, 
Name: "johnson", 
showMessage: function() 
{ 
alert("ID: " + this.ID + ", Name: " + this.Name); 
} 
} 
var obj1 = new myClass(); 
var obj2 = new myClass();
로그인 후 복사

클래스의 구조는 여전히 이전 예제와 동일하지만 여기서는 프로토타입을 사용하여 구현됩니다. 먼저 마지막 두 문장을 살펴보겠습니다. 앞서 언급했듯이 프로토타입은 함수 생성자 이전에 실행됩니다. 즉, var obj1 = new myClass();가 실행되기 전에 이 클래스에는 이미 ID, Name 속성 및 showMessage 메서드가 있습니다. 실행자가 문장을 작성할 때 실행 프로세스는 다음과 같습니다. 이전 예제와의 비교에 유의하세요. 먼저 빈 개체를 만들고 이 개체를 가리키는 this 포인터입니다. 그런 다음 함수 프로토타입 객체의 모든 멤버를 이 객체에 할당합니다(이러한 멤버는 다시 생성되지 않습니다). 그런 다음 함수 본문을 실행합니다. 마지막으로 new는 이 객체를 반환합니다. 다음 문장을 실행하는 경우: 이 프로세스도 실행되며 이러한 멤버는 반복적으로 생성되지 않습니다.
위 코드는 단지 예시일 뿐이며, 실제 프로젝트에서는 클래스에 많은 구성원이 있을 수 있으며, 많은 수의 인스턴스를 생성해야 할 수도 있습니다. 이 프로토타입은 그 우수성을 보여줄 것입니다. 또한 위 코드는 중괄호 구문을 사용하여 프로토타입의 멤버를 정의하므로 코드가 더 명확해 보입니다. 이는 권장되는 클래스 디자인 패턴입니다. 물론 많은 프로젝트에서 더 나은 모델을 찾을 수도 있습니다. 또한 더 최적화된 JavaScript 프로그래밍 모델을 통해 새로운 모델을 계속 도입할 수 있기를 바랍니다. 또한 시간이 지남에 따라 모든 주요 브라우저에서도 JavaScript 구문 분석이 표준화되기를 바랍니다. .
위에서 언급했듯이 프로토타입에서 정의한 멤버는 생성자보다 먼저 발생합니다. 위의 예에서 생성자가 비어 있음을 증명할 수 있습니다. 생성자에 실행 시 var obj1 = new myClass();, 올바른 속성 값을 보여주는 팝업 대화 상자가 표시됩니다.
다음 코드:

function subClass(){ } 
subClass.prototype = 
{ 
Name: "sub" 
} 
function myClass() 
{ 
//构造函数 
} 
myClass.prototype = 
{ 
ID: 1, 
Name: "johnson", 
SubObj: new subClass(), 
showMessage: function() 
{ 
alert("ID: " + this.ID + ", Name: " + this.Name + "SubObj.Name:" + this.SubObj.Name); 
} 
} 
var obj1 = new myClass(); 
obj1.SubObj.Name = "XXX"; 
obj1.showMessage(); 
var obj2 = new myClass(); 
obj2.showMessage();
로그인 후 복사

여기서 myClass에 참조 유형이 정의되어 있으며 해당 유형은 우리가 사용자 정의한 하위 클래스 클래스입니다. 이 하위 클래스에는 Name 속성이 있습니다. 위의 분석에 따르면 프로토타입 객체가 공유되므로 var obj1 = new myClass();를 실행할 때 myClass 프로토타입의 멤버가 이 obj1 인스턴스에 복사됩니다. 그러나 여기서 SubObj는 참조 유형입니다. var obj2 = new myClass();가 실행되면 프로토타입의 ID 및 Name 멤버는 obj2에 복사되지만 SubObj 속성은 복사되지 않지만 프로토타입에서 참조됩니다. . SubObj. 이전 문장에서 obj1.Subobj.Name의 값을 수정했기 때문에 new를 사용하여 obj2 인스턴스를 생성할 때 수정된 값이 참조됩니다.
그래서 프로토타입을 사용하여 클래스를 정의할 때 생성자에서 속성을 정의하고 생성자의 프로토타입에서 메서드를 정의해야 합니다. 다음과 같습니다:

function myClass(id, name) 
{ 
this.ID = id; 
this.Name = name; 
} 
myClass.prototype = 
{ 
showMessage: function() 
{ 
alert("ID: " + this.ID + ", Name: " + this.Name); 
}, 
showMessage2: function() 
{ 
alert("Method2"); 
} 
} 
var obj1 = new myClass(1, "johnson"); 
obj1.showMessage(); 
obj1.Name="John"; 
obj1.showMessage(); 
var obj2 = new myClass(2, "Amanda"); 
obj2.showMessage();
로그인 후 복사

위 내용은 함수를 통해 JavaScript에서 클래스 인스턴스를 정의하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

권장 사항: 우수한 JS 오픈 소스 얼굴 감지 및 인식 프로젝트 권장 사항: 우수한 JS 오픈 소스 얼굴 감지 및 인식 프로젝트 Apr 03, 2024 am 11:55 AM

얼굴 검출 및 인식 기술은 이미 상대적으로 성숙하고 널리 사용되는 기술입니다. 현재 가장 널리 사용되는 인터넷 응용 언어는 JS입니다. 웹 프런트엔드에서 얼굴 감지 및 인식을 구현하는 것은 백엔드 얼굴 인식에 비해 장점과 단점이 있습니다. 장점에는 네트워크 상호 작용 및 실시간 인식이 줄어 사용자 대기 시간이 크게 단축되고 사용자 경험이 향상된다는 단점이 있습니다. 모델 크기에 따라 제한되고 정확도도 제한됩니다. js를 사용하여 웹에서 얼굴 인식을 구현하는 방법은 무엇입니까? 웹에서 얼굴 인식을 구현하려면 JavaScript, HTML, CSS, WebRTC 등 관련 프로그래밍 언어 및 기술에 익숙해야 합니다. 동시에 관련 컴퓨터 비전 및 인공지능 기술도 마스터해야 합니다. 웹 측면의 디자인으로 인해 주목할 가치가 있습니다.

MySQL 복합 기본 키의 정의 및 기능 MySQL 복합 기본 키의 정의 및 기능 Mar 15, 2024 pm 05:18 PM

MySQL의 복합 기본 키는 테이블의 여러 필드로 구성된 기본 키를 말하며 각 레코드를 고유하게 식별하는 데 사용됩니다. 단일 기본 키와 달리 복합 기본 키는 여러 필드의 값을 결합하여 형성됩니다. 테이블을 생성할 때 여러 필드를 기본 키로 지정하여 복합 기본 키를 정의할 수 있습니다. 복합 기본 키의 정의와 기능을 보여주기 위해 먼저 id, 사용자 이름, 이메일이라는 세 가지 필드가 포함된 users라는 테이블을 만듭니다. 여기서 id는 자동으로 증가하는 기본 키이고 user입니다.

디스커스란 무엇인가요? Discuz의 정의 및 기능 소개 디스커스란 무엇인가요? Discuz의 정의 및 기능 소개 Mar 03, 2024 am 10:33 AM

"Discovering Discuz: 정의, 기능 및 코드 예제" 인터넷의 급속한 발전과 함께 커뮤니티 포럼은 사람들이 정보를 얻고 의견을 교환하는 중요한 플랫폼이 되었습니다. 많은 커뮤니티 포럼 시스템 중에서 중국의 잘 알려진 오픈 소스 포럼 소프트웨어인 Discuz는 대다수의 웹 사이트 개발자 및 관리자가 선호합니다. 그렇다면 Discuz는 무엇입니까? 어떤 기능이 있으며 웹사이트에 어떻게 도움이 됩니까? 이 기사에서는 Discuz를 자세히 소개하고 독자가 이에 대해 더 자세히 알아볼 수 있도록 구체적인 코드 예제를 첨부합니다.

PHP 및 JS 개발 팁: 주식 캔들 차트 그리기 방법 익히기 PHP 및 JS 개발 팁: 주식 캔들 차트 그리기 방법 익히기 Dec 18, 2023 pm 03:39 PM

인터넷 금융의 급속한 발전으로 인해 주식 투자는 점점 더 많은 사람들의 선택이 되었습니다. 주식 거래에서 캔들 차트는 주가의 변화 추세를 보여주고 투자자가 보다 정확한 결정을 내리는 데 도움이 되는 일반적으로 사용되는 기술적 분석 방법입니다. 이 기사에서는 PHP와 JS의 개발 기술을 소개하고 독자가 주식 캔들 차트를 그리는 방법을 이해하도록 유도하며 구체적인 코드 예제를 제공합니다. 1. 주식 캔들 차트의 이해 주식 캔들 차트를 그리는 방법을 소개하기 전에 먼저 캔들 차트가 무엇인지부터 이해해야 합니다. 캔들스틱 차트는 일본인이 개발했습니다.

PHP 인터페이스 소개 및 정의 방법 PHP 인터페이스 소개 및 정의 방법 Mar 23, 2024 am 09:00 AM

PHP 인터페이스 소개 및 정의 방법 PHP는 웹 개발에 널리 사용되는 오픈 소스 스크립팅 언어입니다. 유연하고 간단하며 강력합니다. PHP에서 인터페이스는 여러 클래스 간의 공통 메서드를 정의하여 다형성을 달성하고 코드를 보다 유연하고 재사용 가능하게 만드는 도구입니다. 이 기사에서는 PHP 인터페이스의 개념과 이를 정의하는 방법을 소개하고 사용법을 보여주는 특정 코드 예제를 제공합니다. 1. PHP 인터페이스 개념 인터페이스는 클래스 애플리케이션을 정의하는 객체 지향 프로그래밍에서 중요한 역할을 합니다.

간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 간단한 JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법 Jan 05, 2024 pm 06:08 PM

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

js와 vue의 관계 js와 vue의 관계 Mar 11, 2024 pm 05:21 PM

js와 vue의 관계: 1. 웹 개발의 초석인 JS 2. 프론트엔드 프레임워크로서의 Vue.js의 등장 3. JS와 Vue의 상호 보완적인 관계 4. JS와 Vue의 실제 적용 Vue.

전폭 문자의 정의 및 사용 전폭 문자의 정의 및 사용 Mar 25, 2024 pm 03:33 PM

전각 문자란 무엇입니까? 컴퓨터 인코딩 시스템에서 이중 너비 문자는 두 개의 표준 문자 위치를 차지하는 문자 인코딩 방법입니다. 이에 표준 문자 위치를 차지하는 문자 인코딩 방식을 반각문자라 한다. 전자 문자는 일반적으로 중국어, 일본어, 한국어 및 기타 아시아 문자의 입력, 표시 및 인쇄에 사용됩니다. 중국어 입력 방법과 텍스트 편집에서는 전자와 반각 문자의 사용 시나리오가 다릅니다. 전각문자 사용 중국어 입력방법 : 중국어 입력방법에서는 한자, 기호 등의 한자를 입력할 때 일반적으로 전각문자를 사용한다.

See all articles