개요
객체 지향 프로그래밍에 대해 이야기 할 때 우리는 무엇을 이야기하고 있습니까?
우리는 먼저 물체, 클래스, 캡슐화, 상속, 다형성의 일부 개념에 대해 이야기합니다.
객체와 클래스는 객체 지향의 기초이며, 캡슐화, 상속 및 다형성은 객체 지향 프로그래밍의 세 가지 주요 특징입니다.
JavaScript는 객체를 제공하지만 클래스가 부족하며 C#과 같은 클래스를 명시 적으로 정의 할 수 없습니다.
그러나 JavaScript의 함수 기능은 매우 유연하며 그 중 하나는 생성자 및 프로토 타입 객체와 함께 "클래스"를 구현할 수있는 생성자입니다.
개체 및 클래스 개념
물체
"개체"는 객체 지향 프로그래밍에서 매우 중요한 개념입니다. 개체는 "사물"(누군가 또는 무언가)에 대한 설명입니다.
사람과 사물은 실생활에서 비롯되며 현실 세계에 대한 우리의 이해는 사람과 사물에 대한 우리의 이해입니다.
프로그래밍 분야에서 코드는 일반인에게 추상적이며 코드 적용은 실제 문제를 더 잘 해결하는 것입니다.
분석 및 설계 단계에서 "객체"의 개념은 실제 문제를 더 잘 반영 할 수 있습니다.
반대로, 코드에는 비즈니스를 설명하는 데 사용되는 논리가 포함되어 있습니다. 비즈니스에는 비즈니스 지식이 포함되어 있습니다. 비즈니스 지식은 실제 세계의 이해와 분석을 통해 요약됩니다. 이러한 문제는 현실 세계의 "물체"로 구성됩니다.
객체에는 특징과 행동이 포함되어 있습니다. OOP 용어로, 특징은 객체의 속성이며 행동은 객체의 방법입니다.
친절한
실제 세계에서는 특정 표준에 따라 비슷한 개체를 그룹화 할 수 있습니다. 예를 들어, "벌새"와 "독수리"는 모두 새로 나뉩니다. 조류는 특정한 대상이 아닙니다. 그들은 "벌새"및 "이글스"와 같은 특정 조류를 기반으로 비슷한 특성과 행동을 분석 한 후 사람들이 요약 한 개념입니다. 클래스는 템플릿과 동일 하며이 템플릿을 기반으로 다른 특정 객체를 만들 수 있습니다.
C#에서는 새를 정의 할 수 있습니다.
/// <summary> /// birds /// </summary> public class bird {public void fly () {console.writeline ( "i can fly!"); }}JavaScript는 객체 지향 프로그래밍 언어이지만 클래스에 대한 구문 지원을 제공하지는 않습니다.
JavaScript에서는 모든 것이 객체를 기반으로합니다. 우리가 나중에 이야기 할 "프로토 타입"조차도 물체입니다. JavaScript의 상속 및 재사용도 프로토 타입을 통해 구현됩니다.
그러나 생성자와 프로토 타입 객체를 결합하면 JavaScript의 "클래스"를 구현할 수 있습니다.
건설자
이전에는 New Array ()를 사용하여 배열을 만들고 새 개체 ()를 사용하여 객체를 만들었습니다. Array () 및 Object ()는 JavaScript의 두 개의 내장 생성자입니다. JavaScript는 클래스를 제공하지 않지만 배열과 개체를 "클래스"의 개념으로 이해할 수 있습니다.
JavaScript의 "클래스"는 생성자에 의해 구현된다는 점에 유의해야합니다.
생성자를 정의하십시오
생성자는 또한 함수이며, 생성자 정의와 다른 함수 사이에는 구문 차이가 없습니다.
유일한 차이점은 생성자의 첫 번째 문자가 자본화되어야하며, 이는 JavaScript의 프로그래밍 사양이기도합니다.
다음은 Person () 생성자를 정의하며, 우리는 개인 클래스로 이해할 수 있습니다.
function person () {console.log ( 'I am keepfool.');}JavaScript의 "클래스"및 생성자는 동시에 정의됩니다. JavaScript에서 "클래스"를 정의 할 때 생성자는 동시에 정의됩니다.
생성자 사용
JavaScript는 C#과 동일한 방식으로 클래스를 사용하며 새 키워드와 생성자가 뒤 따릅니다.
var p = 새로운 사람 ();
속성과 방법을 정의합니다
이제 Person 클래스를 정의 했으므로 Person 클래스에 속성과 방법을 추가 할 수 있습니다.
속성을 정의합니다
JavaScript 객체에 대해 이야기 할 때, 우리는 객체의 속성 설정 및 액세스에 대해 이야기합니다.
이 코드는 객체 속성을 정의하는 두 가지 방법을 보여줍니다.
var cat = {color : 'black'}; cat.name = 'tom'; console.log (cat.color); console.log (cat.name);이것을 사용하여 속성을 정의하십시오
JavaScript 클래스의 속성 정의 방법은 다소 다릅니다. 이 키워드를 사용하여 생성자의 속성을 정의하십시오.
기능인 (이름) {this.name = name;}• 첫 번째 코드 라인은 개인 클래스를 정의하고 생성자를 정의합니다.
• 두 번째 코드 줄은 이름 속성을 정의합니다.
개체를 만들고 사용합니다
다음 2 줄의 코드는 두 사람 클래스 개체를 만듭니다.
var p1 = 새로운 사람 ( 'James'); var p2 = 새로운 사람 ( 'cury');
Chrome 콘솔에서 출력 P1.Name 및 P2.Name
P1과 P2는 두 가지 다른 객체이며, p1.name은 p2.name에 영향을 미치지 않습니다.
p1.name = 'LeBron James';
메소드를 정의하십시오
먼저 "함수"및 "메소드"라는 용어를 구별해 봅시다. "기능"은 독립 단위이며 "메소드"는 주제로서 클래스의 존재에 의존합니다.
이것을 사용하여 방법을 정의하십시오
JavaScript에서 클래스 메소드는 생성자의 함수를 정의 하고이 키워드를 사용하여 생성자의 메소드를 정의하는 것입니다.
function person (name) {// 속성을 정의 this.name = name; // 메소드를 정의합니다 .sayhello = function () {return 'hello, i am' + this.name;}}사용 방법
Chrome 콘솔에서 각각 P1 및 P2 객체의 SayHello () 메소드를 호출하십시오.
생성자 속성
객체가 생성되면 특수 특성이 JavaScript에 의해 객체에 자동으로 할당 되며이 특성은 생성자 속성입니다.
Chrome 콘솔에 p1.constructor 입력하면 P1 객체의 생성자 특성이 함수를 가리 킵니다.
이 기능의 내용을보십시오. 이것은 Person () 생성자가 아닌가?
즉, P1.constructor 속성을 통해 객체를 만들 수 있음을 의미합니다.
var p3 = 새로운 p1.constructor ( 'Steve Nash');
이 코드 라인은 문장을 설명합니다. "P1 객체가 어떻게 생성되는지는 상관하지 않지만 P1처럼 다른 객체가 생성되기를 원합니다!"
Chrome 콘솔의 운영자 인스턴스를 사용하면 P1, P2 및 P3이 모든 사람 클래스의 인스턴스임을 알 수 있습니다.
또한 {} way로 객체를 만들 때 객체 () 생성자가 실제로 호출됩니다.
var o = {};이 코드 라인은 객체를 선언합니다. 속성과 메소드를 설정하지는 않지만 JavaScript 엔진은 기본적으로 생성자 속성을 설정합니다.
o.constructor Object () 생성자를 가리키고 [native code] 는 Object ()가 JavaScript의 내장 함수임을 보여줍니다.
프로토 타입 객체
JavaScript에서 함수를 정의 할 때 함수는 프로토 타입 속성을 갖고 생성자도 예외는 아닙니다.
다음 그림은 Person () 생성자의 프로토 타입 속성이 기능에 속하는 객체 이며이 속성을 프로토 타입 객체라고합니다.
Person 클래스의 관점에서, 우리는 프로토 타입 속성이 사람 클래스에 속한다는 것을 이해할 수 있습니다.
동시에 개인 클래스의 인스턴스에는 프로토 타입 속성이 없습니다. 위의 그림의 p1.prototype은 정의되지 않으며, 이는 프로토 타입 속성이 공유되었으며 이는 C#의 정적 속성과 비슷합니다.
프로토 타입 설정
프로토 타입은 객체이므로 속성과 메소드를 추가 할 수 있습니다.
함수의 프로토 타입 속성에서 속성 및 메소드를 정의하는 것은 일반 객체의 속성 및 방법을 설정하는 것과 다르지 않습니다.
다음 코드는 Person.prototype의 속성 및 메소드를 정의합니다.
기능인 (name) {this.name = name; this.sayhello = function () {return 'hello, i am' + this.name;}} // 생성자의 프로토 타입 객체 person.prototype.height = 176; person.prototype.run = function () {return 'am' + this. 사람 ( '제임스');프로토 타입 사용
직원으로 정의 된 프로토 타입 특성 및 방법. 프로토 타입은 사람 클래스의 인스턴스에 의해 직접 사용할 수 있으며 여전히 object.property 형태로 사용됩니다.
name 과 sayHello() 는 개인 클래스에 속하는 인스턴스이고 height 와 run() 개인 클래스에 속하지 않는 인스턴스입니다.
팁 : 객체에 HasOwnProperty 메소드를 통해 특정 속성 또는 방법이 포함되어 있는지 확인할 수 있습니다.
프로토 타입 속성
Person 클래스의 인스턴스는 개인 클래스의 속성과 Person.Prototype의 속성을 모두 사용할 수 있습니다.
그렇다면 사람 클래스의 특성과 person.prototype의 특성의 차이점은 무엇입니까?
먼저, 개인 클래스의 속성과 방법을 "인스턴스 속성"으로 이해할 수 있습니다.
프로토 타입이 공유되므로 프로토 타입의 속성과 방법을 "공유 속성"으로 이해할 수 있습니다.
"인스턴스 속성"과 "공유 속성"의 차이점은 주로 성능에 반영됩니다.
개인 인스턴스가 생성 될 때마다 이름 속성 및 sayhello () 메소드의 사본이 생성되고 높이 속성 및 run () 메소드는 모든 인스턴스의 사본을 공유합니다.
즉, 이것은 Sayhello () 메소드가 프로토 타입에 언급 될 수 있음을 의미합니다.
또한 사람 인스턴스 높이가 다를 수 있으므로 개인 클래스에 넣는 것이 더 합리적이어야합니다.
기능인 (이름, 높이) {this.name = name; this.height = height;} person.prototyp.sayhello = function () {return 'hello, am' + this.name + ', 내 높이는' + this.height + 'cm. 사람 ( 'James', 203); var p2 = 새로운 사람 ( 'Cury', 190);클래스 구현 요약
JavaScript에는 클래스가 없지만 생성자는 "클래스"를 구현할 수 있습니다.
JavaScript 프로그래밍 사양에 따라 생성자의 첫 번째 문자는 대문자를 대문자로 삼아야합니다.
"클래스"의 특성과 방법은이 .property method의 생성자에 정의됩니다.
객체 생성이 생성되면 JavaScript는 생성자 속성을 객체에 할당합니다. 생성자 속성은 객체 생성자 함수에 대한 참조입니다.
함수는 이미 정의 된 시제품 속성을 가지고 있으며 프로토 타입 속성도 객체입니다.
프로토 타입은 공유되며 프로토 타입에 정의 된 특성 및 방법은 "클래스"의 인스턴스로 사용할 수 있습니다.
프로토 타입에서 속성이나 방법을 정의 할 수있는 경우 생성자에서 정의하지 마십시오. 프로토 타입을 사용하면 메모리 오버 헤드를 줄일 수 있습니다.
JavaScript OOP- 클래스 구현 세부 정보에 관한 위의 기사는 내가 공유 한 모든 컨텐츠입니다. 나는 당신이 당신에게 참조를 줄 수 있기를 바랍니다. 그리고 당신이 wulin.com을 더 지원할 수 있기를 바랍니다.