객체지향이란 무엇인가요? 객체지향은 생각이다! (무의미한 말).
객체지향은 프로그램의 핵심 모듈을 객체로 간주할 수 있으며, 모듈에는 속성과 메소드가 있습니다. 이런 식으로 일부 속성과 메서드를 캡슐화하면 향후 사용이 매우 편리할 것이며 지루하고 반복적인 작업을 피할 수도 있습니다. 다음으로 JS에서의 객체지향 구현에 대해 설명하겠습니다.
공장 모드
팩토리 패턴은 소프트웨어 엔지니어링 분야에서 잘 알려진 디자인 패턴입니다. ECMAScript에서는 클래스를 생성할 수 없기 때문에 특정 인터페이스를 가진 객체를 생성하려면 함수 캡슐화를 사용합니다. 구현 방법은 매우 간단합니다. 즉, 함수 내에서 개체를 만들고 개체에 속성과 메서드를 할당한 다음 개체를 반환합니다.
function createBlog(name, url) { var o = new Object(); o.name = name; o.url = url; o.sayUrl= function() { alert(this.url); } return o; } var blog1 = createBlog('wuyuchang', 'http://www.jb51.net/');
팩토리 패턴의 구현 방법은 매우 간단하여 유사한 객체를 여러 개 생성하는 문제를 해결한 것을 알 수 있습니다. 그러나 팩토리 패턴은 Date, Array, Array와 달리 모두 객체이기 때문에 객체의 유형을 식별할 수 없습니다. 등등, 그래서 생성자 패턴이 있습니다.
생성자 패턴
ECMAScript의 생성자는 Array 및 Date와 같은 기본 JS 객체와 유사한 특정 유형의 객체를 생성할 수 있습니다. 구현 방법은 다음과 같습니다.
function Blog(name, url) { this.name = name; this.url = url; this.alertUrl = function() { alert(this.url); } } var blog = new Blog('wuyuchang', 'http://www.jb51.net/'); console.log(blog instanceof Blog); // true, 判断blog是否是Blog的实例,即解决了工厂模式中不能
이 예제와 공장 모델의 함수 이름이 다르다는 점을 제외하면 주의 깊은 아이들은 많은 차이점을 발견할 수 있습니다.
함수 이름의 첫 글자는 대문자여야 합니다. (표준에서는 첫 글자를 대문자로 써야 한다고 엄격하게 요구하지는 않지만, 관례적으로 생성자의 첫 글자는 대문자로 써야 합니다.
생성된 개체가 표시되지 않습니다
이 개체에 속성과 메서드를 직접 할당
반품 명세서 없음
new를 사용하여 객체 생성
객체 인식 가능(여기서 생성자 패턴이 팩토리 패턴보다 우수함)
생성자는 사용하기 쉽지만 단점이 없는 것은 아닙니다. 생성자를 사용할 때 가장 큰 문제는 인스턴스가 생성될 때마다 메서드를 다시 생성해야 한다는 것입니다(이론적으로 객체의 속성은 다음과 같습니다). 객체가 생성될 때마다 다릅니다. 객체의 메소드는 동일하지만 정확히 동일한 메소드를 두 번 생성할 필요는 없으므로 객체 외부로 함수를 이동할 수 있습니다(어쩌면 일부 어린이는 이미 단점을 보았을 수도 있습니다. 우우!).
function Blog(name, url) { this.name = name; this.url = url; this.alertUrl = alertUrl; } function alertUrl() { alert(this.url); } var blog = new Blog('scjb51', 'http://sc.jb51.net/'), blog2 = new Blog('jb51', 'http://www.jb51.net/'); blog.alertUrl(); // http://sc.jb51.net/ blog2.alertUrl(); // http://www.jb51.net/
alertUrl을 전역 함수로 설정하여 blog와 blog2가 동일한 기능에 액세스하도록 했습니다. 그러나 문제는 실제로 Blog에서만 사용되는 함수를 전역 범위에서 정의합니다. 좀 더 수용하기 어려운 점은 특정 객체에서만 사용되는 많은 메서드가 전역 범위에 정의되어 있다는 점입니다. 공간 낭비는 말할 것도 없고 객체 지향 캡슐화도 손실되므로 이 문제는 프로토타입을 통해 해결할 수 있습니다. . 질문.
프로토타입 모드
우리가 만드는 모든 함수에는 객체에 대한 포인터인 프로토타입 속성이 있으며, 이 객체의 목적은 특정 유형의 모든 인스턴스에서 공유할 수 있는 속성과 메서드를 포함하는 것입니다. 프로토타입 객체를 사용하면 모든 객체 인스턴스가 포함된 속성과 메서드를 공유할 수 있다는 장점이 있습니다.
function Blog() { } Blog.prototype.name = 'wuyuchang'; Blog.prototype.url = 'http://tools.jb51.net/'; Blog.prototype.friend = ['fr1', 'fr2', 'fr3', 'fr4']; Blog.prototype.alertInfo = function() { alert(this.name + this.url + this.friend ); } // 以下为测试代码 var blog = new Blog(), blog2 = new Blog(); blog.alertInfo(); // wuyuchanghttp://tools.jb51.net/fr1,fr2,fr3,fr4 blog2.alertInfo(); // wuyuchanghttp://tools.jb51.net/fr1,fr2,fr3,fr4 blog.name = 'wyc1'; blog.url = 'http://***.com'; blog.friend.pop(); blog2.name = 'wyc2'; blog2.url = 'http://+++.com'; blog.alertInfo(); // wyc1http://***.comfr1,fr2,fr3 blog2.alertInfo(); // wyc2http://+++.comfr1,fr2,fr3
프로토타입 패턴에는 단점이 있습니다. 우선 초기화 매개변수를 전달하는 생성자를 생략하므로 기본적으로 모든 인스턴스가 동일한 속성 값을 얻습니다. 이는 매우 불편합니다. 아직 프로토타입이 아닙니다. 프로토타입 패턴의 가장 큰 문제는 공유의 특성 때문에 발생합니다. 한 인스턴스가 참조를 수정하면 다른 인스턴스도 참조를 변경합니다. 그래서 보통 프로토타입만 단독으로 사용하지 않고 프로토타입 패턴과 생성자 패턴을 결합하여 사용하는 경우가 많습니다.
혼합 모드(프로토타입 모드, 생성자 모드)
function Blog(name, url, friend) { this.name = name; this.url = url; this.friend = friend; } Blog.prototype.alertInfo = function() { alert(this.name + this.url + this.friend); } var blog = new Blog('wuyuchang', 'http://tools.jb51.net/', ['fr1', 'fr2', 'fr3']), blog2 = new Blog('wyc', 'http://**.com', ['a', 'b']); blog.friend.pop(); blog.alertInfo(); // wuyuchanghttp://tools.jb51.net/fr1,fr2 blog2.alertInfo(); // wychttp://**.coma,b
혼합 모드에서는 생성자 모드를 사용하여 인스턴스 속성을 정의하고, 프로토타입 모드를 사용하여 메서드 및 공유 속성을 정의합니다. 각 인스턴스에는 고유한 인스턴스 속성이 있지만 동시에 메서드를 공유하여 메모리를 최대한 절약합니다. 또한 이 모드는 초기 매개변수 전달도 지원합니다. 장점은 많습니다. 이 모드는 ECMAScript에서 사용자 정의 객체를 생성하는 가장 널리 사용되고 인식되는 방법입니다.
동적 프로토타입 모드
동적 프로토타입 모드는 생성자에 모든 정보를 캡슐화하고 생성자에서 프로토타입을 초기화함으로써(첫 번째 객체가 인스턴스화될 때 프로토타입만 초기화됨) 메소드가 맞는지 여부를 판단하여 프로토타입 초기화 여부를 선택할 수 있습니다. 유효한. .
function Blog(name, url) { this.name = name; this.url = url; if (typeof this.alertInfo != 'function') { // 这段代码只执行了一次 alert('exe time'); Blog.prototype.alertInfo = function() { alert(thia.name + this.url); } } } var blog = new Blog('wuyuchang', 'http://tools.jb51.net'), blog2 = new Blog('wyc', 'http:***.com');
위의 예에서 창은 '실행 시간', 즉 블로그가 초기화될 때 한 번만 나타나는 것을 볼 수 있습니다. 이런 식으로 blog2는 더 이상 프로토타입을 초기화할 필요가 없습니다. 이 모드를 사용하여 객체를 생성합니다.
이 블로그 게시물은 "JavaScript를 사용한 고급 프로그래밍 " 제3판을 참조하고 있지만, 언어를 단순화하고 예제를 다시 작성했습니다. 이해가 안 되는 부분이 있으면 남겨주세요. 답장을 보내면 작성자가 블로그를 업데이트할 것입니다.

C/C에서 JavaScript로 전환하려면 동적 타이핑, 쓰레기 수집 및 비동기 프로그래밍으로 적응해야합니다. 1) C/C는 수동 메모리 관리가 필요한 정적으로 입력 한 언어이며 JavaScript는 동적으로 입력하고 쓰레기 수집이 자동으로 처리됩니다. 2) C/C를 기계 코드로 컴파일 해야하는 반면 JavaScript는 해석 된 언어입니다. 3) JavaScript는 폐쇄, 프로토 타입 체인 및 약속과 같은 개념을 소개하여 유연성과 비동기 프로그래밍 기능을 향상시킵니다.

각각의 엔진의 구현 원리 및 최적화 전략이 다르기 때문에 JavaScript 엔진은 JavaScript 코드를 구문 분석하고 실행할 때 다른 영향을 미칩니다. 1. 어휘 분석 : 소스 코드를 어휘 단위로 변환합니다. 2. 문법 분석 : 추상 구문 트리를 생성합니다. 3. 최적화 및 컴파일 : JIT 컴파일러를 통해 기계 코드를 생성합니다. 4. 실행 : 기계 코드를 실행하십시오. V8 엔진은 즉각적인 컴파일 및 숨겨진 클래스를 통해 최적화하여 Spidermonkey는 유형 추론 시스템을 사용하여 동일한 코드에서 성능이 다른 성능을 제공합니다.

실제 세계에서 JavaScript의 응용 프로그램에는 서버 측 프로그래밍, 모바일 애플리케이션 개발 및 사물 인터넷 제어가 포함됩니다. 1. 서버 측 프로그래밍은 Node.js를 통해 실현되며 동시 요청 처리에 적합합니다. 2. 모바일 애플리케이션 개발은 재교육을 통해 수행되며 크로스 플랫폼 배포를 지원합니다. 3. Johnny-Five 라이브러리를 통한 IoT 장치 제어에 사용되며 하드웨어 상호 작용에 적합합니다.

일상적인 기술 도구를 사용하여 기능적 다중 테넌트 SaaS 응용 프로그램 (Edtech 앱)을 구축했으며 동일한 작업을 수행 할 수 있습니다. 먼저, 다중 테넌트 SaaS 응용 프로그램은 무엇입니까? 멀티 테넌트 SAAS 응용 프로그램은 노래에서 여러 고객에게 서비스를 제공 할 수 있습니다.

이 기사에서는 Contrim에 의해 확보 된 백엔드와의 프론트 엔드 통합을 보여 주며 Next.js를 사용하여 기능적인 Edtech SaaS 응용 프로그램을 구축합니다. Frontend는 UI 가시성을 제어하기 위해 사용자 권한을 가져오고 API가 역할 기반을 준수하도록합니다.

JavaScript는 현대 웹 개발의 핵심 언어이며 다양성과 유연성에 널리 사용됩니다. 1) 프론트 엔드 개발 : DOM 운영 및 최신 프레임 워크 (예 : React, Vue.js, Angular)를 통해 동적 웹 페이지 및 단일 페이지 응용 프로그램을 구축합니다. 2) 서버 측 개발 : Node.js는 비 차단 I/O 모델을 사용하여 높은 동시성 및 실시간 응용 프로그램을 처리합니다. 3) 모바일 및 데스크탑 애플리케이션 개발 : 크로스 플랫폼 개발은 개발 효율을 향상시키기 위해 반응 및 전자를 통해 실현됩니다.

JavaScript의 최신 트렌드에는 Typescript의 Rise, 현대 프레임 워크 및 라이브러리의 인기 및 WebAssembly의 적용이 포함됩니다. 향후 전망은보다 강력한 유형 시스템, 서버 측 JavaScript 개발, 인공 지능 및 기계 학습의 확장, IoT 및 Edge 컴퓨팅의 잠재력을 포함합니다.

JavaScript는 현대 웹 개발의 초석이며 주요 기능에는 이벤트 중심 프로그래밍, 동적 컨텐츠 생성 및 비동기 프로그래밍이 포함됩니다. 1) 이벤트 중심 프로그래밍을 사용하면 사용자 작업에 따라 웹 페이지가 동적으로 변경 될 수 있습니다. 2) 동적 컨텐츠 생성을 사용하면 조건에 따라 페이지 컨텐츠를 조정할 수 있습니다. 3) 비동기 프로그래밍은 사용자 인터페이스가 차단되지 않도록합니다. JavaScript는 웹 상호 작용, 단일 페이지 응용 프로그램 및 서버 측 개발에 널리 사용되며 사용자 경험 및 크로스 플랫폼 개발의 유연성을 크게 향상시킵니다.


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구

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