웹 프론트엔드 JS 튜토리얼 JavaScript_Basic 지식으로 객체지향 클래스를 구현하는 방법에 대한 간략한 토론

JavaScript_Basic 지식으로 객체지향 클래스를 구현하는 방법에 대한 간략한 토론

May 16, 2016 pm 04:27 PM
javascript 친절한 객체지향

객체는 사람들이 연구하고 싶어하는 모든 것입니다. 가장 단순한 정수부터 복잡한 비행기까지 객체로 간주할 수 있습니다. 이는 특정 사물뿐만 아니라 추상적인 규칙, 계획 또는 이벤트도 나타낼 수 있습니다. --바이두백과사전에서 인용

객체 지향 프로그래밍은 현재 가장 인기 있는 프로그래밍 모델입니다. 하지만 가장 실망스러운 점은 가장 널리 사용되는 프런트엔드 애플리케이션인 JavaScript가 객체지향 프로그래밍을 지원하지 않는다는 것입니다.

JavaScript에는 액세스 제어 문자가 없고, 클래스를 정의하는 키워드 class가 없으며, 상속을 위한 확장이나 콜론을 지원하지 않으며, 가상 기능을 지원하기 위해 virtual을 사용하지 않습니다. class 키워드 없이 Javascript가 클래스 정의를 구현하고 객체를 생성하는 방법을 살펴보겠습니다.

클래스를 정의하고 해당 클래스의 인스턴스 객체를 생성합니다

Javascript에서는 다음과 같이 함수를 사용하여 클래스를 정의합니다.

코드 복사 코드는 다음과 같습니다.

함수 모양()
{
var x=1;
var y=2;
}

의심스럽다고 말할 수 있을까요? 이것은 정의 기능이 아닌가? 예, 이것은 정의 함수입니다. Shape 함수를 정의하고 x와 y를 초기화합니다. 그러나 다른 각도에서 보면 이는 x와 y라는 두 개의 속성을 갖는 Shape 클래스를 정의하는 것이며 초기값은 각각 1과 2이다. 클래스는 클래스가 아니라 함수입니다.

그런 다음 다음과 같이 Shape 클래스의 aShape 객체를 생성할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

var aShape = 새로운 모양()

공공 및 사유 재산 정의

aShape 개체를 생성했지만 해당 속성에 액세스하려고 하면 다음과 같은 오류가 발생합니다.

코드 복사 코드는 다음과 같습니다.

aShape.x=1

이는 var로 정의된 속성이 비공개임을 나타냅니다. 공용 속성을 정의하려면 이 키워드를 사용해야 합니다.

코드 복사 코드는 다음과 같습니다.

함수 모양()
{
This.x=1;
This.y=2;
}

이런 방식으로 다음과 같은 Shape 속성에 액세스할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

aShape.x=2

좋아, 위의 코드를 기반으로 요약할 수 있습니다. var를 사용하여 클래스의 비공개 속성을 정의하고 이를 사용하여 클래스의 공개 속성을 정의합니다.

공개 및 비공개 방법 정의

Javascript에서 함수는 Function 클래스의 인스턴스입니다. 따라서 함수도 객체이므로 함수를 생성할 수 있습니다. 클래스에 함수를 할당하면 이 속성 변수는 실행 가능한 함수이므로 메서드라고 부를 수 있습니다. 코드는 다음과 같습니다.

코드 복사 코드는 다음과 같습니다.

함수 모양()
{
var x=0;
var y=1;
This.draw=function()
{
            //인쇄;
};
}

위 코드에서 draw를 정의하고 여기에 함수를 할당했습니다. 다음으로 OOP에서 공개 메서드라고 하는 aShape를 통해 이 함수를 호출할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

aShape.draw()

var로 정의하면 이 그리기는 비공개가 됩니다. 이를 OOP에서는 비공개 메서드라고 합니다.

코드 복사 코드는 다음과 같습니다.

함수 모양()
{
var x=0;
var y=1;
var 그리기=함수()
{
            //인쇄;
};
}

이렇게 하면 aShape.draw를 사용하여 이 함수를 호출할 수 없습니다.

생성자

Javascript는 OOP를 지원하지 않으며 물론 생성자가 없습니다. 그러나 생성자를 직접 시뮬레이션하여 객체가 생성될 때 자동으로 호출되도록 할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

함수 모양()
{
var init = 함수()
{
//생성자 코드
};
초기화();
}

Shape의 마지막에는 init 함수를 인위적으로 호출했습니다. 그런 다음 Shape 객체가 생성되면 항상 init가 자동으로 호출되고 생성자를 시뮬레이션할 수 있습니다.

매개변수가 있는 생성자

생성자가 매개변수를 사용하도록 하려면 어떻게 해야 하나요? 사실, 함수의 매개변수 목록에 전달할 매개변수를 작성하기만 하면 됩니다.

코드 복사 코드는 다음과 같습니다.

함수 모양(ax,ay)
{
var x=0;
var y=0;
var init = 함수()
{
//생성자
         x=ax;
y=ay;
};
초기화();
}

이런 방법으로 다음과 같은 개체를 만들 수 있습니다.

코드 복사 코드는 다음과 같습니다.

var aShape = 새 모양(0,1)

정적 속성 및 정적 메서드

Javascript에서 정적 속성과 메서드를 어떻게 정의하나요? 아래와 같이:

코드 복사 코드는 다음과 같습니다.

함수 형태(ax,ay)
{
var x=0;
var y=0;
var init = 함수()
{
//생성자
         x=ax;
y=ay;
};
초기화();
}
Shape.count=0; //정적 속성 개수를 정의합니다. 이 속성은 개체가 아닌 클래스에 속합니다.
Shape.staticMethod=function(){};//정적 메서드 정의

정적 속성과 메서드를 사용하면 다음과 같이 클래스 이름을 사용하여 액세스할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

경고( aShape.count );
aShape.staticMethod()

참고: 정적 속성과 메서드는 공개입니다. 아직까지는 정적 속성과 메서드를 비공개로 만드는 방법을 모르겠습니다~

메소드에서 이 클래스의 공개 및 비공개 속성에 액세스합니다.

클래스 메소드에서 자신의 속성에 액세스합니다. Javascript에는 공개 속성과 비공개 속성에 대한 액세스 방법이 다릅니다.

코드 복사 코드는 다음과 같습니다.

함수 형태(ax,ay)
{
var x=0;
var y=0;
This.gx=0;
This.gy=0;
var init = 함수()
{
           x=ax;//개인 속성에 액세스하려면 변수 이름을 직접 작성하세요.
y=ay;
This.gx=ax;//공용 속성에 접근하려면 변수 이름 앞에 this.
를 추가해야 합니다. This.gy=ay;
};
초기화();
}

참고사항

저자의 경험에 따르면 클래스의 이것이 항상 객체 자체를 가리키는 것은 아닙니다. 더구나 함수와 클래스는 함수로 정의되기 때문에 이로 인해 일부 문제가 발생할 수 있습니다. 사소한 문제.

이 포인터가 오류를 가리키는 상황은 일반적으로 이벤트 처리에서 발생합니다. 이벤트가 트리거되면 시스템이 멤버 함수를 호출합니다. this 포인터는 더 이상 우리 자신의 개체가 아닙니다. 물론 멤버 함수에서 이것을 호출하면 확실히 오류가 발생합니다.

해결책은 클래스 정의 시작 시 이를 개인 속성에 저장하는 것입니다. 나중에 이 속성을 사용하여 이를 대체할 수 있습니다. 매우 안전하고 걱정없는 포인터를 사용하기 위해 이 방법을 사용합니다~

이 문제를 해결하기 위해 코드를 수정해 보겠습니다. Part 6의 코드를 비교하면 다음과 같은 내용을 이해할 수 있습니다.

코드 복사 코드는 다음과 같습니다.

함수 형태(ax,ay)
{
var _this=this; //혼란하지 않도록 저장하고 나중에 _this로 바꾸세요
var x=0;
var y=0;
_this.gx=0;
_this.gy=0;
var init = 함수()
{
           x=ax;//개인 속성에 액세스하려면 변수 이름을 직접 작성하세요.
y=ay;
​​​​ _this.gx=ax;//공용 속성에 접근하려면 변수 이름 앞에
를 추가해야 합니다. ​​​​ _this.gy=ay;
};
초기화();
}

위에서 우리는 Javascript에서 클래스를 정의하고, 클래스의 객체를 생성하고, 공개 및 비공개 속성과 메서드를 생성하고, 정적 속성과 메서드를 생성하고, 생성자를 시뮬레이션하고, 오류가 발생하기 쉬운 방법에 대해 논의했습니다.

Javascript에서의 OOP 구현에 대한 이야기는 여기까지입니다. 일반적으로 Javascript는 클래스를 정의하는 데 사용되며 위의 코드는 객체를 생성하기에 충분합니다. 물론 mootools나 프로토타입을 사용하여 클래스를 정의하고 객체를 생성할 수도 있습니다. 저는 mootools 프레임워크를 사용했는데 더 완벽한 Javascript 클래스 시뮬레이션을 갖추고 있으며 관심 있는 독자가 사용해 볼 수 있다고 생각합니다. 물론 프레임워크를 사용하는 경우 웹페이지에 관련 js 헤더 파일을 포함해야 하므로 독자들이 프레임워크 없이도 클래스를 만들 수 있기를 바랍니다. 이렇게 하면 코드가 더 효율적이고 여러분도 할 수 있습니다. 보세요, 간단한 클래스를 만드는 것은 어렵지 않습니다~

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

Go의 객체 지향 프로그래밍 살펴보기 Go의 객체 지향 프로그래밍 살펴보기 Apr 04, 2024 am 10:39 AM

Go 언어는 유형 정의 및 메소드 연관을 통해 객체 지향 프로그래밍을 지원합니다. 전통적인 상속을 지원하지 않지만 구성을 통해 구현됩니다. 인터페이스는 유형 간의 일관성을 제공하고 추상 메소드를 정의할 수 있도록 합니다. 실제 사례에서는 OOP를 사용하여 고객 운영 생성, 획득, 업데이트 및 삭제를 포함하여 고객 정보를 관리하는 방법을 보여줍니다.

PHP 고급 기능: 객체 지향 프로그래밍의 모범 사례 PHP 고급 기능: 객체 지향 프로그래밍의 모범 사례 Jun 05, 2024 pm 09:39 PM

PHP의 OOP 모범 사례에는 명명 규칙, 인터페이스 및 추상 클래스, 상속 및 다형성, 종속성 주입이 포함됩니다. 실제 사례에는 웨어하우스 모드를 사용하여 데이터를 관리하고 전략 모드를 사용하여 정렬을 구현하는 것이 포함됩니다.

Golang에 클래스와 유사한 객체지향 기능이 있나요? Golang에 클래스와 유사한 객체지향 기능이 있나요? Mar 19, 2024 pm 02:51 PM

Golang(Go 언어)에는 전통적인 의미의 클래스 개념이 없지만, 클래스와 유사한 객체지향 기능을 구현할 수 있는 구조체라는 데이터 형식을 제공합니다. 이 기사에서는 구조를 사용하여 객체 지향 기능을 구현하는 방법을 설명하고 특정 코드 예제를 제공합니다. 구조의 정의와 사용법 먼저 구조의 정의와 사용법을 살펴보자. Golang에서는 type 키워드를 통해 구조를 정의한 다음 필요한 곳에 사용할 수 있습니다. 구조에는 속성이 포함될 수 있습니다.

Go 언어의 객체지향적 특징 분석 Go 언어의 객체지향적 특징 분석 Apr 04, 2024 am 11:18 AM

Go 언어는 객체 지향 프로그래밍, 구조체를 통한 객체 정의, 포인터 수신기를 사용한 메서드 정의, 인터페이스를 통한 다형성 구현을 지원합니다. 객체 지향 기능은 Go 언어에서 코드 재사용, 유지 관리 용이성 및 캡슐화를 제공하지만 클래스 및 상속 및 메서드 시그니처 캐스트에 대한 전통적인 개념이 부족하다는 제한 사항도 있습니다.

'PHP의 객체 지향 프로그래밍 소개: 개념에서 실습까지' 'PHP의 객체 지향 프로그래밍 소개: 개념에서 실습까지' Feb 25, 2024 pm 09:04 PM

객체 지향 프로그래밍이란 무엇입니까? 객체 지향 프로그래밍(OOP)은 실제 엔터티를 클래스로 추상화하고 객체를 사용하여 이러한 엔터티를 나타내는 프로그래밍 패러다임입니다. 클래스는 객체의 속성과 동작을 정의하고, 객체는 클래스를 인스턴스화합니다. OOP의 가장 큰 장점은 코드를 더 쉽게 이해하고 유지 관리하며 재사용할 수 있다는 것입니다. OOP의 기본 개념 OOP의 주요 개념에는 클래스, 개체, 속성 및 메서드가 포함됩니다. 클래스는 객체의 속성과 동작을 정의하는 객체의 청사진입니다. 객체는 클래스의 인스턴스이며 클래스의 모든 속성과 동작을 갖습니다. 속성은 데이터를 저장할 수 있는 개체의 특성입니다. 메소드는 객체의 데이터에 대해 작동할 수 있는 객체의 함수입니다. OOP의 장점 OOP의 주요 장점은 다음과 같습니다. 재사용성: OOP는 코드를 더 많이 만들 수 있습니다.

PHP 객체 지향 프로그래밍에 대한 심층적인 이해: 객체 지향 프로그래밍을 위한 디버깅 기술 PHP 객체 지향 프로그래밍에 대한 심층적인 이해: 객체 지향 프로그래밍을 위한 디버깅 기술 Jun 05, 2024 pm 08:50 PM

개체 상태 추적, 중단점 설정, 예외 추적 및 xdebug 확장 활용을 마스터하면 PHP 개체 지향 프로그래밍 코드를 효과적으로 디버그할 수 있습니다. 1. 객체 상태 추적: var_dump() 및 print_r()을 사용하여 객체 속성 및 메소드 값을 확인합니다. 2. 중단점 설정: 개발 환경에서 중단점을 설정하면 실행이 중단점에 도달하면 디버거가 일시 중지되므로 개체 상태를 쉽게 확인할 수 있습니다. 3. 예외 추적: 예외 발생 시 스택 추적 및 메시지를 가져오려면 try-catch 블록과 getTraceAsString()을 사용합니다. 4. 디버거 사용: xdebug_var_dump() 함수는 코드 실행 중에 변수의 내용을 검사할 수 있습니다.

PHP 객체지향 프로그래밍에 대한 심층적인 이해: 클래스와 객체 간의 상호작용 PHP 객체지향 프로그래밍에 대한 심층적인 이해: 클래스와 객체 간의 상호작용 Jun 01, 2024 am 11:20 AM

객체 지향 프로그래밍(OOP)은 실제 엔터티를 나타내기 위해 객체의 데이터와 동작을 캡슐화하는 프로그래밍 패러다임입니다. PHP에서 OOP를 사용하면 현실 세계의 엔터티를 나타내는 클래스와 개체를 만들 수 있습니다. 클래스: 개체의 데이터(속성)와 작업(메서드)을 정의합니다. 객체: 클래스의 속성과 메서드를 포함하고 다른 객체와 상호 작용할 수 있는 클래스의 인스턴스입니다. OOP 실제 사례: 장바구니에는 다음 두 클래스로 모델링된 일련의 제품이 포함되어 있습니다. 제품: 이름과 가격이 포함된 단일 제품을 나타냅니다. 카트: 제품 목록이 포함되어 있고 제품을 추가하고 총 가격을 계산하는 방법을 제공하는 장바구니를 나타냅니다.

Go의 제어 반전: 객체 지향 프로그래밍의 유연성 Go의 제어 반전: 객체 지향 프로그래밍의 유연성 Apr 08, 2024 am 09:21 AM

Go 언어의 제어 역전은 객체 생성과 종속성 주입을 분리하여 객체 지향 프로그래밍에 유연성을 제공합니다. IoC 기본 원칙: 외부 컨테이너 또는 프레임워크는 객체 생성 및 주입을 관리하고 객체는 더 이상 다른 객체를 직접 인스턴스화하지 않습니다. 종속성 주입: 종속성은 개체에 매개 변수로 전달되어 개체를 종속성과 독립적으로 만들어 쉽게 테스트하고 재사용할 수 있습니다. IoC 컨테이너: 객체 생성 및 주입을 관리하는 데 사용됩니다. Go 언어에는 wire 및 go-wire와 같이 선택할 수 있는 기성 컨테이너가 많이 있습니다. 장점: 테스트 용이성 향상, 유지 관리 용이성 향상, 유연성 제공, 개체 간의 종속성을 느슨하게 연결합니다.

See all articles