웹 프론트엔드 JS 튜토리얼 JavaScript 디자인 패턴 캡슐화 및 정보 은닉(1부)_Javascript 기술

JavaScript 디자인 패턴 캡슐화 및 정보 은닉(1부)_Javascript 기술

May 16, 2016 pm 05:51 PM
캡슐화

이 글은 두 부분으로 나누어져 있는데, 윗 부분에서는 전체 노출, 밑줄 표기, 클로저 사용 등의 내용을 다루고, 아랫 부분에서는 고급 패턴, 정적 메서드 및 속성 구현 방법, 기타 지식 포인트에 대해 설명합니다.
캡슐화는 객체지향 언어의 매우 기본적이고 유용한 기능입니다. JavaScript는 객체지향 언어라고도 할 수 있지만 비공개 및 보호를 사용하는 한 다른 언어와 달리 캡슐화에 대한 지원은 그리 좋지 않습니다. 그것은 달성될 수 있다. 하지만 그렇다고 해서 방법이 없다는 뜻은 아닙니다. 아래에서는 JavaScript로 캡슐화를 구현하는 방법을 소개하겠습니다.
1. 기본 패턴, 에는 크게 전체 노출 방식, 밑줄 표기 방식, 클로저 활용 등 3가지 방식이 있습니다. (폐쇄는 매우 중요하고 어려운 개념입니다. 관심 있는 친구들은 온라인으로 정보를 찾을 수 있습니다. 제 블로그에 다른 사람들의 글도 재인쇄했습니다.)
여기서는 book 클래스를 예로 들어 book 클래스를 생성하고 초기화해야 합니다.

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

// Book(isbn, 제목, 저자 )
var theHobbit = new Book('0-395-07122-4', 'The Hobbit', 'J. R. R. Tolkien');
theHobbit.display(); HTML 요소

1. 전체 노출 방법:
북 클래스를 생성할 때 가장 전통적인 생성자 방법인
코드 복사를 사용할 수 있습니다. 코드는 다음과 같습니다.

var Book = function(isbn, title,author) {
 if(!this.checkIsbn(isbn)) throw new Error('Book: Invalid ISBN.');
 this.isbn = isbn;
 //코드에서 ||의 기능은 제목에 값이 없으면 '제목이 지정되지 않음'이 할당된다는 것입니다. this.title로. 이 방법은 매우 유용하며 자신의 코드에서 사용할 수 있습니다.
 this.title = 제목 || '제목 지정 없음';
 this.author = 작성자 || '작성자 지정 없음'
}
Book.prototype = {
 //확인 isbn 함수
checkIsbn: function(isbn) {
},
//isbn 설정
setIsbn: function(isbn) {
if(!this.checkIsbn(isbn)) throw new Error ('도서: 잘못된 ISBN.');
this.isbn = isbn;
 },
// 제목 가져오기
getTitle: function() {
return this.title; > },
// 제목 설정
setTitle: function(title) {
 this.title = title || '지정된 제목 없음'
 },
 //저자 가져오기
 getAuthor: function() {
 return this.author;
 },
 //저자 설정
 setAuthor: function(author) {
 this.author = 작성자 || 작성자 지정 없음';
 //표시 기능
 display: function() {
  ...
 }
}; 코드가 많아서 여기서는 간단히 설명하겠습니다. JavaScript에서 클래스를 생성하는 것은 C# 및 Java와 약간 다릅니다. 예를 들어




코드 복사

코드는 다음과 같습니다.

public class book()
{
private string isbn public string ISBN { set {   this.isbn=value; (문자열 isdn) {
......
}
......
public void Display( )
{
.... .
}
}


Javascript도 이 방법을 사용할 수 있지만 위에서 사용한 방법을 사용하여 클래스 정의 함수(또는 생성자)에 속성을 정의하고 프로토타입 객체에 메서드를 정의하는 것이 좋습니다. 이유는 Google에 접속할 수 있습니다.
위의 js 코드가 달성하려는 기능은 세 가지 개인 변수(또는 속성) isbn, title, 작성자, 개인 메서드 checkIsbn 및 여러 공용 메서드 getIsdn, setIsdn을 포함하는 책 클래스를 정의하는 것입니다. .표시하다. 아이디어는 좋지만 현실은 잔혹하다. 사실 그런 사적 재산이나 방법은 전혀 사적이지 않다. 예를 들어, theHobbit.isbn = '978-0261103283'; 이 방법으로 isbn에 오류 없이 값을 할당할 수 있으며 완전히 성공합니다. 그 이유는 JavaScript에는 특정 객체를 사유화하는 비공개 방법이 없기 때문입니다. 또한 이 구현 방법은 사용 시 혼란을 야기할 수도 있습니다. 클래스 작성자는 어떤 속성과 메서드를 공개하려고 합니까? 아래에서는 첫 번째 개선 방법인 밑줄 표시 방법을 소개합니다.
 2. 밑줄 표기 :
코드 복사 코드는 다음과 같습니다.

var Book = function(isbn, title,author) {
// 생성자 코드
this.setIsbn(isbn)
this.setTitle(title)
this.setAuthor(author); 🎜> }
Book.prototype = {  
 //isbn 함수 확인
 _checkIsbn: function(isbn) {
  ... function() { return this._isbn
},
//isbn 설정
setIsbn: function(isbn) { ('도서: 잘못된 ISBN.') This._isbn = isbn
},
...
display: function( ) { ..  
 }
};


사실 비공개로 구현하려는 모든 속성이나 메서드 앞에 밑줄 _을 추가하면 됩니다. 작업. 이 방법은 진정한 민영화를 달성하지 못합니다. theHobbit._isbn = '978-0261103283'; 이 방법의 가장 큰 의미는 작성자가 노출하려는 개체와 노출하려는 개체를 클래스 사용자에게 알려주는 것입니다. 노출하고 싶지 않습니다. 그러나 작성자는 사용자가 작성자의 아이디어를 따르는지 여부를 제어할 수 없습니다.
그렇다면 진정한 민영화를 달성할 수 있는 방법이 있을까요? 대답은 '예'입니다. 클로저를 사용하는 것입니다.
3. 클로저 사용:
JavaScript가 진정한 캡슐화를 달성할 수 있는 이유는 고유한 함수 범위, 내부 함수에 대한 함수 지원 및 클로저와 분리될 수 없습니다. 온라인에 접속하여 관련 지식을 수집하여 이해를 심화할 수 있습니다.
아래에서 가장 먼저 이야기할 것은 함수 범위입니다. JavaScript에서는 변수가 함수 내부에 정의되어 있으면 함수 외부에서 해당 변수에 접근할 방법이 없습니다. 실제로 JavaScript에서 개인 속성이나 메서드를 구현하면 이 특수 속성을 활용할 수 있습니다. 예:



코드 복사


코드는 다음과 같습니다.

function foo() {  var a = 10; 함수 bar() { a } bar() return a; 🎜> in 위의 예에서 함수 foo는 내부적으로 변수 a와 메소드 bar를 정의합니다. A와 bar는 foo 외부에서 액세스할 수 없습니다. 그러나 a와 bar는 모두 foo 내부에 정의되어 있으므로 bar는 a에 액세스할 수 있습니다. 그렇다면 foo 외부에서 bar에 액세스할 수 있는 방법이 있습니까? 대답은 '예'입니다. 클로저를 사용하는 것입니다.



코드 복사


코드는 다음과 같습니다.


function foo() {
 var a = 10 ;
함수 bar() {
a *= 2;
return a; } var baz = foo(); // baz는 이제 함수 bar에 대한 참조입니다. baz(); // 20을 반환합니다. baz(); // 40을 반환합니다. baz() // 80을 반환합니다. var blat = foo(); // blat는 bar에 대한 또 다른 참조입니다. blat(); // a의 새 복사본이 사용되기 때문에 20을 반환합니다. 앞서 JavaScript 함수가 내부 함수를 지원한다고 언급했습니다. 내부 함수 bar는 개인 변수 a에 접근할 수 있고, 함수 foo는 내부 함수 bar를 baz에 던지고, baz는 클로저를 구현하는 내부 변수 a에 접근할 수 있습니다. 이런 식으로 프라이빗 변수와 메소드가 실제로 구현되는 것은 누구나 한 눈에 알 수 있습니다. 이전 책 예제로 돌아가서 구현은 다음과 같습니다.



코드 복사


코드는 다음과 같습니다.

var Book = function(newIsbn, newTitle, newAuthor) {
  // Publication 구현
  // Private 속성.
  var isbn, 제목, 저자;
  // 비공개 방식입니다.
  function checkIsbn(isbn) {
    ...
  }
  // 권한 있는 메서드.
  this.getIsbn = function() {
    return isbn;
  };
  this.setIsbn = function(newIsbn) {
    if(!checkIsbn(newIsbn)) throw new Error('도서: 잘못된 ISBN.');
    isbn = newIsbn;
  };
  this.getTitle = function() {
    반환 제목;
  };
  this.setTitle = function(newTitle) {
    title = newTitle || '제목이 지정되지 않았습니다';
  };
  this.getAuthor = function() {
    작성자 반환;
  };
  this.setAuthor = function(newAuthor) {
    author = newAuthor || '지정된 작성자 없음';
  };
  // 생성자 코드입니다.
  this.setIsbn(newIsbn);
  this.setTitle(newTitle);
  this.setAuthor(newAuthor);
};
// 권한이 없는 공개 메서드입니다.
Book.prototype = {
  display: function() {
    ...
  }
};

上述代码就实现了 isbn, 제목, 작성자 와checkIsbn적私유화,외부是决定不能直接访问到的。如需访问 isbn, 제목, 작성자只能过对象级방법getTitle ,setTitle...。比如要给给给赋值,只能用theHobbit.setIsbn = '978-0261103283';,如果你还用theHobbit._isbn = '978-0261103283';,对不起要报错

 好了,今天的内容就讲到这里了,希望对大家有帮助。
작가:下一站永远

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

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

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

TrendForce: Nvidia의 Blackwell 플랫폼 제품으로 TSMC의 CoWoS 생산 능력이 올해 150% 증가합니다. TrendForce: Nvidia의 Blackwell 플랫폼 제품으로 TSMC의 CoWoS 생산 능력이 올해 150% 증가합니다. Apr 17, 2024 pm 08:00 PM

4월 17일 이 사이트의 뉴스에 따르면 TrendForce는 최근 Nvidia의 새로운 Blackwell 플랫폼 제품에 대한 수요가 강세를 보이고 있으며, 이로 인해 TSMC의 전체 CoWoS 패키징 생산 능력이 2024년에 150% 이상 증가할 것으로 예상된다는 보고서를 발표했습니다. NVIDIA Blackwell의 새로운 플랫폼 제품에는 B 시리즈 GPU와 NVIDIA 자체 GraceArm CPU를 통합한 GB200 가속기 카드가 포함됩니다. TrendForce는 현재 공급망이 GB200에 대해 매우 낙관적이며, 출하량이 2025년에 100만 개를 초과할 것으로 예상되며 이는 Nvidia 고급 GPU의 40~50%를 차지할 것으로 확인했습니다. 엔비디아는 하반기에 GB200, B100 등의 제품을 출시할 계획이지만, 업스트림 웨이퍼 패키징에는 더욱 복잡한 제품을 채택해야 합니다.

AMD 'Strix Halo' FP11 패키지 크기 노출: Intel LGA1700과 동일, Phoenix보다 60% 더 큼 AMD 'Strix Halo' FP11 패키지 크기 노출: Intel LGA1700과 동일, Phoenix보다 60% 더 큼 Jul 18, 2024 am 02:04 AM

이 웹사이트는 7월 9일에 AMD Zen5 아키텍처 "Strix" 시리즈 프로세서에 두 가지 패키징 솔루션이 있을 것이라고 보고했습니다. 더 작은 StrixPoint는 FP8 패키지를 사용하고 StrixHalo는 FP11 패키지를 사용합니다. 출처: videocardz 출처 @Olrak29_ 최근 밝혀진 바에 따르면 StrixHalo의 FP11 패키지 크기는 37.5mm*45mm(1687제곱밀리미터)로 Intel의 AlderLake 및 RaptorLake CPU의 LGA-1700 패키지 크기와 동일합니다. AMD의 최신 Phoenix APU는 25*40mm 크기의 FP8 패키징 솔루션을 사용합니다. 이는 StrixHalo의 F가

PHP의 패키징 기술 및 응용 PHP의 패키징 기술 및 응용 Oct 12, 2023 pm 01:43 PM

PHP의 캡슐화 기술과 애플리케이션 캡슐화는 객체 지향 프로그래밍에서 중요한 개념입니다. 이는 외부 프로그램에 대한 통합 액세스 인터페이스를 제공하기 위해 데이터와 데이터에 대한 작업을 함께 캡슐화하는 것을 의미합니다. PHP에서는 액세스 제어 수정자와 클래스 정의를 통해 캡슐화를 달성할 수 있습니다. 이 기사에서는 PHP의 캡슐화 기술과 해당 애플리케이션 시나리오를 소개하고 몇 가지 구체적인 코드 예제를 제공합니다. 1. 캡슐화된 액세스 제어 수정자 PHP에서 캡슐화는 주로 액세스 제어 수정자를 통해 이루어집니다. PHP는 세 가지 액세스 제어 수정자를 제공합니다.

Vue의 Axios 캡슐화 및 일반적인 방법 소개 Vue의 Axios 캡슐화 및 일반적인 방법 소개 Jun 09, 2023 pm 04:13 PM

Vue의 Axios 캡슐화 및 일반적인 방법 소개 Axios는 Promise를 기반으로 한 HTTP 라이브러리로 가독성, 사용 용이성 및 확장성이 뛰어나다는 장점이 있습니다. 널리 사용되는 프런트엔드 프레임워크인 Vue는 Axios에 대한 완벽한 지원도 제공합니다. 이 기사에서는 Vue에서 Axios를 캡슐화하는 방법을 소개하고 일반적으로 사용되는 Axios 방법을 소개합니다. 1. Axios 캡슐화 개발 과정에서 우리는 종종 다음과 같은 Axios의 맞춤형 캡슐화를 수행해야 합니다.

C++ 함수는 코드를 캡슐화하여 GUI 개발 효율성을 어떻게 향상합니까? C++ 함수는 코드를 캡슐화하여 GUI 개발 효율성을 어떻게 향상합니까? Apr 25, 2024 pm 12:27 PM

C++ 함수는 코드를 캡슐화함으로써 GUI 개발 효율성을 향상시킬 수 있습니다. 코드 캡슐화: 함수는 코드를 독립적인 단위로 그룹화하여 코드를 더 쉽게 이해하고 유지 관리할 수 있도록 합니다. 재사용성: 함수는 애플리케이션 전체에서 재사용할 수 있는 공통 기능을 생성하여 중복과 오류를 줄입니다. 간결한 코드: 캡슐화된 코드는 기본 논리를 간결하고 쉽게 읽고 디버깅할 수 있도록 만듭니다.

폭스콘은 AI 원스톱 서비스 구축하고 샤프에 투자해 첨단 반도체 패키징 진출: 2026년 생산 개시, 월 20,000장의 웨이퍼 생산을 목표로 설계 폭스콘은 AI 원스톱 서비스 구축하고 샤프에 투자해 첨단 반도체 패키징 진출: 2026년 생산 개시, 월 20,000장의 웨이퍼 생산을 목표로 설계 Jul 18, 2024 pm 02:17 PM

11일 본 사이트의 소식에 따르면, 경제일보는 오늘(11일) 폭스콘그룹이 현재 주류인 패널레벨팬아웃패키징(FOPLP) 반도체 솔루션을 중심으로 첨단 패키징 분야에 진출했다고 보도했다. 1. 자회사 이노룩스에 이어 폭스콘그룹이 투자한 샤프도 일본 패널급 팬아웃 패키징 분야 진출을 발표해 2026년 생산에 들어갈 예정이다. 폭스콘 그룹 자체가 AI 분야에서 충분한 영향력을 갖고 있고, 첨단 패키징의 단점을 보완해 향후 더 많은 AI 제품 주문 수용을 촉진하는 '원스톱' 서비스를 제공할 수 있다. 이 사이트에서 참조한 공개 정보에 따르면 폭스콘 그룹은 현재 샤프 지분 10.5%를 보유하고 있으며 현 단계에서는 지분을 늘리거나 줄이지 않고 그대로 유지할 것이라고 밝혔습니다.

Go 언어에서 캡슐화 및 상속을 구현하는 방법 Go 언어에서 캡슐화 및 상속을 구현하는 방법 Jul 23, 2023 pm 08:17 PM

Go 언어에서 캡슐화 및 상속을 구현하는 방법 캡슐화 및 상속은 객체 지향 프로그래밍에서 두 가지 중요한 개념으로, 코드를 보다 모듈화하고 유지 관리하기 쉽게 만들고 코드 재사용을 위한 편의성을 제공합니다. 이 글에서는 Go 언어로 캡슐화와 상속을 구현하는 방법을 소개하고 해당 코드 예제를 제공합니다. 캡슐화 캡슐화는 데이터와 기능을 캡슐화하고, 구현 세부 사항을 숨기고, 외부 사용을 위해 필요한 인터페이스만 노출하는 것입니다. Go 언어에서는 내보낸 식별자와 내보내지 않은 식별자를 통해 캡슐화가 이루어집니다. 대문자로 된 식별자는 다른 패키지에서 접근 가능

Python 코드의 확장성 저하 오류를 해결하는 방법은 무엇입니까? Python 코드의 확장성 저하 오류를 해결하는 방법은 무엇입니까? Jun 25, 2023 am 09:51 AM

Python은 고급 프로그래밍 언어로서 데이터 분석, 기계 학습, 웹 개발 및 기타 분야에서 널리 사용됩니다. 그러나 코드의 크기가 계속해서 확장되면서 Python 프로그램의 확장성 문제가 점차 명백해집니다. 확장성 오류는 Python 프로그램이 특정 상황에서 요구 사항 변화에 잘 적응할 수 없고 대규모 데이터를 처리할 수 없어 프로그램 성능이 저하된다는 것을 의미합니다. 너무 많은 종속성, 열악한 코드 구조, 문서 부족 등은 모두 Python 프로그램의 확장성 오류의 원인입니다.

See all articles