웹 프론트엔드 JS 튜토리얼 객체지향 자바스크립트를 기반으로 객체 생성에 대한 자세한 설명(1)_javascript 기술

객체지향 자바스크립트를 기반으로 객체 생성에 대한 자세한 설명(1)_javascript 기술

May 16, 2016 pm 03:26 PM

이번에는 JavaScript 객체지향 기술에 대해 심도있게 공부하겠습니다. 배우기 전에 객체지향 용어에 대한 설명이 필요합니다. 이것이 모든 객체지향 언어의 공통점이다. 객체 지향 용어에는 여러 가지가 있습니다.
1. 객체
ECMA-262는 객체를 "순서가 지정되지 않은 속성 모음으로, 각 속성은 기본 값, 객체 또는 함수를 저장합니다"라고 정의합니다. 엄밀히 말하면 객체는 특별한 순서가 없는 값의 배열이라는 뜻입니다. ECMAScript는 객체를 이런 방식으로 정의하지만 보다 일반적인 정의는 명사(사람, 장소 또는 사물)를 코드 기반으로 표현하는 것입니다.
2. 카테고리
모든 개체는 클래스에 의해 정의되며, 클래스는 개체의 레시피로 간주될 수 있습니다. 클래스는 객체의 인터페이스(개발자가 액세스하는 속성 및 메서드)뿐만 아니라 객체의 내부 작동(속성과 메서드를 작동시키는 코드)도 정의합니다. 컴파일러와 인터프리터는 모두 클래스 사양을 기반으로 개체를 만듭니다.
3. 예시
프로그램이 클래스를 사용하여 객체를 만들 때 생성된 객체를 클래스의 인스턴스라고 합니다. 클래스가 생성할 수 있는 객체 수에 대한 유일한 제한은 코드가 실행되는 컴퓨터의 물리적 메모리에서 비롯됩니다. 각 인스턴스는 동일하게 동작하지만 인스턴스는 독립적인 데이터 세트를 처리합니다. 클래스에서 객체 인스턴스를 생성하는 프로세스를 인스턴스화라고 합니다.
이전 장에서 우리는 ECMAScript에는 형식적인 클래스가 없다고 언급했습니다. 대조적으로, ECMA-262는 객체 정의를 객체에 대한 레시피로 설명합니다. 이는 객체 정의가 실제로 객체 자체이기 때문에 ECMAScript 논리의 절충안입니다. 클래스가 실제로 존재하지 않더라도 대부분의 개발자가 이 용어에 더 익숙하고 두 용어가 기능적으로 동일하기 때문에 객체 정의를 클래스라고 부릅니다.
미리 정의된 개체를 사용하는 것은 개체 지향 언어 기능의 일부일 뿐입니다. 이 언어의 진정한 힘은 자신만의 전용 개체를 만드는 능력에 있습니다. ECMAScript에는 객체를 생성하는 다양한 방법이 있습니다.
1. 독창적인 방식
객체가 생성된 후 객체의 속성을 동적으로 정의할 수 있기 때문에 JavaScript가 처음 소개되었을 때 많은 개발자가 다음과 유사한 코드를 작성했습니다.

var Car = new Object(); 
Car.color = "blue"; 
Car.doors = 4; 
Car.mpg = 25; 
Car.showColor = function() { 
  return this.color; 
}; 
document.write(Car.showColor());//输出:blue 
로그인 후 복사

위 코드에서 Car 객체를 생성합니다. 그런 다음 몇 가지 속성을 지정하십시오. 파란색이고 문이 4개 있으며 갤런당 25마일을 주행합니다. 마지막 속성은 실제로 함수에 대한 포인터입니다. 즉, 속성이 메서드라는 뜻입니다. 이 코드를 실행한 후 Car 개체를 사용할 수 있습니다. 그러나 여기에는 문제가 있습니다. 즉, 여러 개의 Car 인스턴스를 생성해야 할 수도 있으며, 이로 인해 유사한 코드가 많이 반복되어 매우 번거로워질 수 있습니다.
2. 팩토리 방식
위의 여러 유사한 개체 선언 문제를 해결하기 위해 개발자는 특정 유형의 개체를 생성하고 반환할 수 있는 팩토리를 만들었습니다. 이 방법은 인스턴스화된 객체의 대량 중복 문제를 해결하기 위한 것입니다.
(1) 매개변수가 없는 팩토리 메소드
예를 들어, createCar() 함수를 사용하면 이전에 나열된 Car 객체 생성 작업을 캡슐화할 수 있습니다.

function createCar() { 
var TempCar = new Object(); 
TempCar.color = "blue"; 
TempCar.doors = 4; 
TempCar.mpg = 25; 
TempCar.showColor = function() { 
    return this.color; 
 }; 
 return TempCar; 
}; 
var Car1 = createCar(); 
var Car2 = createCar(); 
document.write(Car1.showColor()+"<br/>");//输出:blue 
document.write(Car2.showColor());//输出:blue 
로그인 후 복사

여기에서는 첫 번째 예제의 모든 코드가 createCar() 함수에 포함되어 있습니다. 또한 TempCar 개체를 함수 값으로 반환하는 추가 코드 줄이 있습니다. 이 함수를 호출하면 새로운 객체가 생성되고 앞서 설명한 Car 객체를 복사하여 필요한 모든 속성이 부여됩니다. 따라서 이 접근 방식을 사용하면 정확히 동일한 속성을 가진 두 가지 버전의 Car 개체(Car1 및 Car2)를 쉽게 만들 수 있습니다.
(2) 매개변수를 사용한 팩토리 메소드
단순히 속성에 기본값을 제공하는 대신 createCar() 함수를 수정하여 각 속성의 기본값을 전달할 수도 있습니다.

function createCar(Color,Doors,Mpg) { 
 var TempCar = new Object(); 
 TempCar.color = Color; 
 TempCar.doors = Doors; 
 TempCar.mpg = Mpg; 
 TempCar.showColor = function() { 
    return this.color; 
 }; 
 return TempCar; 
}; 
var Car1 = createCar("red",4,23); 
var Car2 = createCar("blue",3,25); 
document.write(Car1.showColor()+"<br/>");//输出:red 
document.write(Car2.showColor());//输出:blue 
로그인 후 복사

createCar() 함수에 매개변수를 추가하면 생성할 Car 객체의 color, door, mpg 속성에 값을 할당할 수 있습니다. 이렇게 하면 두 객체가 동일한 속성을 가지지만 속성 값은 달라집니다.
팩토리 메소드는 반복되는 인스턴스화 문제를 해결하지만 여전히 문제가 있습니다. 즉, 이전 예에서는 createCar() 함수가 호출될 때마다 새로운 함수 showColor()를 생성해야 합니다. 즉, 각 객체가 자체 showColor() 버전이 있습니다. 실제로 모든 객체는 동일한 기능을 공유합니다. 일부 개발자는 이 문제를 피하기 위해 팩토리 함수 외부에서 객체의 메서드를 정의한 다음 속성을 통해 메서드를 가리킵니다.

function showColor() { 
   return this.color; 
}; 
function createCar(Color,Doors,Mpg) { 
 var TempCar = new Object(); 
 TempCar.color = Color; 
 TempCar.doors = Doors; 
 TempCar.mpg = Mpg; 
 TempCar.showColor = showColor; 
 return TempCar; 
}; 
var Car1 = createCar("red",4,23); 
var Car2 = createCar("blue",3,25); 
document.write(Car1.showColor()+"<br/>");//输出:red 
document.write(Car2.showColor());//输出:blue 
로그인 후 복사

在上面这段重写的代码中,在函数 createCar()之前定义了函数 showColor()。在createCar()内部,赋予对象一个指向已经存在的 showColor() 函数的指针。从功能上讲,这样解决了重复创建函数对象的问题;但是从语义上讲,该函数不太像是对象的方法。所有这些问题都引发了开发者定义的构造函数的出现。
3、构造函数方式
创建构造函数就像创建工厂方式的函数一样容易。第一步选择构造函数的名字。根据惯例,这个名字的首字母大写,以使它与首字母通常是小写的变量名分开。除了这点不同,构造函数看起来很像工厂方式的函数。请看下面的例子:

function Car(Color,Doors,Mpg) { 
 this.color = Color; 
 this.doors = Doors; 
 this.mpg = Mpg; 
 this.showColor = function() { 
    return this.color; 
 }; 
}; 
var Car1 = new Car("red",4,23); 
var Car2 = new Car("blue",3,25); 
document.write(Car1.showColor()+"<br/>");//输出:red 
document.write(Car2.showColor());//输出:blue 
로그인 후 복사

       下面为您解释上面的代码与工厂方式的差别。首先在构造函数内没有创建对象,而是使用this关键字。使用new运算符构造函数时,在执行第一行代码前先创建一个对象,只有用this才能访问该对象。然后可以直接赋予this属性,默认情况下是构造函数的返回值(不必明确使用 return 运算符)。现在,用new运算符和对象名Car创建对象,就更像 ECMAScript 中一般对象的创建方式了。
      就像工厂方式的函数,构造函数会重复生成函数,为每个对象都创建独立的函数版本。不过,与工厂方式的函数相似,也可以用外部函数重写构造函数,同样地,这么做语义上无任何意义。这正是下面要讲的原型方式的优势所在。在下篇文章中会详细的分析面向对象的原型方式以及其他综合的方式。

以上就是本文的全部内容,希望对大家的学习javascript程序设计有所帮助。

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

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
1 몇 달 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? 내 자신의 JavaScript 라이브러리를 어떻게 작성하고 게시합니까? Mar 18, 2025 pm 03:12 PM

기사는 JavaScript 라이브러리 작성, 게시 및 유지 관리, 계획, 개발, 테스트, 문서 및 홍보 전략에 중점을 둡니다.

브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? 브라우저에서 성능을 위해 JavaScript 코드를 최적화하려면 어떻게해야합니까? Mar 18, 2025 pm 03:14 PM

이 기사는 브라우저에서 JavaScript 성능을 최적화하기위한 전략에 대해 설명하고 실행 시간을 줄이고 페이지로드 속도에 미치는 영향을 최소화하는 데 중점을 둡니다.

프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? 프론트 엔드 열 용지 영수증에 대한 차량 코드 인쇄를 만나면 어떻게해야합니까? Apr 04, 2025 pm 02:42 PM

프론트 엔드 개발시 프론트 엔드 열지대 티켓 인쇄를위한 자주 묻는 질문과 솔루션, 티켓 인쇄는 일반적인 요구 사항입니다. 그러나 많은 개발자들이 구현하고 있습니다 ...

브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? 브라우저 개발자 도구를 사용하여 JavaScript 코드를 효과적으로 디버그하려면 어떻게해야합니까? Mar 18, 2025 pm 03:16 PM

이 기사는 브라우저 개발자 도구를 사용하여 효과적인 JavaScript 디버깅, 중단 점 설정, 콘솔 사용 및 성능 분석에 중점을 둡니다.

소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? 소스 맵을 사용하여 조정 된 JavaScript 코드를 디버그하는 방법은 무엇입니까? Mar 18, 2025 pm 03:17 PM

이 기사는 소스 맵을 사용하여 원래 코드에 다시 매핑하여 미니어링 된 JavaScript를 디버그하는 방법을 설명합니다. 소스 맵 활성화, 브레이크 포인트 설정 및 Chrome Devtools 및 Webpack과 같은 도구 사용에 대해 설명합니다.

누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? 누가 더 많은 파이썬이나 자바 스크립트를 지불합니까? Apr 04, 2025 am 12:09 AM

기술 및 산업 요구에 따라 Python 및 JavaScript 개발자에 대한 절대 급여는 없습니다. 1. 파이썬은 데이터 과학 및 기계 학습에서 더 많은 비용을 지불 할 수 있습니다. 2. JavaScript는 프론트 엔드 및 풀 스택 개발에 큰 수요가 있으며 급여도 상당합니다. 3. 영향 요인에는 경험, 지리적 위치, 회사 규모 및 특정 기술이 포함됩니다.

Chart.js : Pie, Donut 및 Bubble Charts를 시작합니다 Chart.js : Pie, Donut 및 Bubble Charts를 시작합니다 Mar 15, 2025 am 09:19 AM

이 튜토리얼은 Chart.js를 사용하여 파이, 링 및 버블 차트를 만드는 방법을 설명합니다. 이전에는 차트 유형의 차트 유형을 배웠습니다. JS : 라인 차트 및 막대 차트 (자습서 2)와 레이더 차트 및 극지 지역 차트 (자습서 3)를 배웠습니다. 파이 및 링 차트를 만듭니다 파이 차트와 링 차트는 다른 부분으로 나뉘어 진 전체의 비율을 보여주는 데 이상적입니다. 예를 들어, 파이 차트는 사파리에서 남성 사자, 여성 사자 및 젊은 사자의 비율 또는 선거에서 다른 후보자가받는 투표율을 보여주는 데 사용될 수 있습니다. 파이 차트는 단일 매개 변수 또는 데이터 세트를 비교하는 데만 적합합니다. 파이 차트의 팬 각도는 데이터 포인트의 숫자 크기에 의존하기 때문에 원형 차트는 값이 0 인 엔티티를 그릴 수 없습니다. 이것은 비율이 0 인 모든 엔티티를 의미합니다

Console.log 출력 결과의 차이 : 두 통화가 다른 이유는 무엇입니까? Console.log 출력 결과의 차이 : 두 통화가 다른 이유는 무엇입니까? Apr 04, 2025 pm 05:12 PM

Console.log 출력의 차이의 근본 원인에 대한 심층적 인 논의. 이 기사에서는 Console.log 함수의 출력 결과의 차이점을 코드에서 분석하고 그에 따른 이유를 설명합니다. � ...

See all articles