jQuery 핵심 아키텍처 설계에 대한 간략한 토론
jQuery는 누구에게나 낯선 것이 아니기 때문에 여기서는 그것이 무엇인지, 무엇을 하는지에 대해 많이 언급하지 않겠습니다. 이 글의 목적은 소스 코드에 대한 간단한 분석을 통해 jQuery의 핵심을 논의하는 것입니다. , jQuery가 JavaScript의 고급 기능을 활용하여 훌륭한 JavaScript 라이브러리를 구축하는 방법을 설명합니다.
1 jQuery 첫 소개
핵심 기능 관점에서 jQuery는 간단하고 일반적인 작업인 쿼리 하나만 수행합니다. 그 구문은 너무 간결하고 명확해서 많은 사람들이 이미 javascript가 무엇인지 모르고 jQuery를 사용해 본 적이 있을 것입니다. 이를 한 단어로 표현하면 단순함과 단순성입니다. 디자인 관점에서 보면 jQuery에서 제공하는 메서드는 정적 메서드와 인스턴스 메서드라는 두 가지 주요 범주로 나눌 수 있습니다. 정적 메서드는 $를 통해 직접 액세스되는 메서드입니다. 이러한 메서드는 일반적으로 DOM 요소에서 작동하지 않지만 ajax 요청 및 문자열에 대한 일부 일반적인 작업과 같은 몇 가지 일반적인 도구를 제공합니다. 확장 메소드를 통해 필요한 구성요소를 작성하십시오. 인스턴스 메소드는 정적 메소드와 다릅니다. jQuery는 $()를 실행하여 jQuery 객체를 생성합니다. 이 객체는 쿼리된 모든 DOM 요소를 배열 메소드에 저장합니다. this 객체의 프로토타입 체인은 이러한 DOM을 작동하기 위한 메서드를 구현합니다. 예를 들어, Each() 메서드는 각 DOM 요소를 탐색하는 데 사용됩니다. 내가 방금 이 객체가 "배열로" 저장되었다고 말한 것을 눈치챌 수도 있습니다. 즉, jQuery로 생성된 객체는 배열이 아닙니다. 그러면 이 객체는 정확히 무엇입니까? 실제로 이 개체는 "jQuery 개체"라고도 알려진 jQuery의 핵심입니다. 따라서 이 글의 초점은 jQuery 객체를 분석하고 논의하는 것입니다.
2 jQuery 객체
일반적으로 jQuery를 다음과 같이 사용합니다:
$('div').each(function(index){ //this ...});
$('div') 이후 실행하면 jQuery 개체가 반환됩니다. Each() 메서드는 이 개체의 DOM 요소를 순회합니다. 먼저 $('div')의 실행 프로세스를 살펴보겠습니다(이 기사의 소스 코드는 jQuery 3.0에서 가져옴). 🎜>
jQuery = function( selector, context ) { return new jQuery.fn.init( selector, context ); }
init = jQuery.fn.init = = jQuery.fn;
init.prototype = jQuery.fn;
jQuery.fn = jQuery.prototype = { // The current version of jQuery being used jquery: version, constructor: jQuery, // The default length of a jQuery object is 0 length: 0, // Execute a callback for every element in the matched set. each: function( callback ) { return jQuery.each( this, callback ); }, splice: arr.splice };
var init = function(selector,context,root){ //... return this; } init.prototype = { length:0, each:function(callback){ //... }, splice:[].splice } jQuery = function(selector,context,root){ return new init(selector,context,root); }
new init(selector,context,root) = { var obj = {}; obj.__proto__ = init.prototype; init.call(obj,selector,context,root); return typeof result === 'obj'? result : obj; }
위 분해 과정에서 볼 수 있듯이 JavaScript는 new를 통해 인스턴스 객체를 생성할 때 먼저 일반 객체 obj를 생성한 다음 obj의 내부 속성 __proto__를 init의 프로토타입 객체를 가리키므로 obj는 프로토타입 체인이 변경되고 3단계에서는 call 메소드를 사용하여 init()를 호출하므로 init의 this는 여기의 obj 객체를 참조합니다.
init()가 실행된 후 은 일치하는 모든 DOM 개체를 배열 형식으로 이 개체에 저장하고 반환합니다. 즉, obj 개체가 반환되고 new 연산자는 결국 이 obj 객체는 새 인스턴스 객체로 반환됩니다. 따라서 new 연산자가 반환한 인스턴스 객체에는 두 가지 특징이 있습니다. 첫째, DOM 쿼리 결과 세트를 포함하고, 둘째, 프로토타입 체인이 init의 프로토타입을 상속하고 init의 프로토타입이 jQuery.fn 객체를 가리킵니다. 이므로 인스턴스 객체에도 이러한 작업 방법이 있습니다.
jQuery는 쿼리를 실행할 때마다 jQuery 객체를 생성하며 동일한 애플리케이션에서 모든 jQuery 객체는 동일한 jQuery 프로토타입 객체를 공유합니다. 따라서 jQuery 개체는 DOM 쿼리 결과 집합을 포함할 뿐만 아니라 jQuery 프로토타입 개체의 작업 메서드도 상속합니다. 이런 방식으로 쿼리 후 이러한 DOM 요소를 조작하는 메서드를 직접 호출할 수 있습니다. 심플하고 편리하며 실용적인 jQuery의 핵심 아키텍처 디자인입니다!
아직 위의 설명이 이해가 안 되시더라도 걱정하지 마세요. jQuery의 디자인 아이디어에 따라 jDate라는 완전한 작은 프로젝트를 작성했으니 비교하고 이해하실 수 있습니다! jDate 프로젝트가 GitHub에 업로드되었습니다. jDate에서 전체 코드를 볼 수 있습니다. 다른 의견이 있으면 언제든지 토론해 주세요.
jQuery의 3가지 결함
jQuery의 핵심 아키텍처를 분석하면 쿼리가 실행될 때마다 jQuery는 메모리 개체에 복잡한 jQuery를 구축해야 한다는 사실을 알 수 있습니다. , 모든 jQuery 개체가 동일한 jQuery 프로토타입을 공유하지만 jQuery의 쿼리 프로세스는 다양한 일치 식별자와 다양한 브라우저의 호환성을 고려해야 합니다. 따라서 DOM에서 몇 가지 간단한 작업만 수행하는 경우에는 jQuery 대신 기본 메서드인 querySelector를 사용하는 것이 좋습니다. 절충안을 만들고 과용하지 마십시오. jQuery에 달려 있습니다!

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

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

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

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

뜨거운 주제











GolangRabbitMQ: 고가용성 메시지 대기열 시스템의 아키텍처 설계 및 구현에는 특정 코드 예제가 필요합니다. 소개: 인터넷 기술의 지속적인 발전과 광범위한 응용으로 인해 메시지 대기열은 현대 소프트웨어 시스템에서 없어서는 안될 부분이 되었습니다. 분리, 비동기 통신, 내결함성 처리 및 기타 기능을 구현하는 도구로서 메시지 큐는 분산 시스템에 대한 고가용성 및 확장성 지원을 제공합니다. 효율적이고 간결한 프로그래밍 언어인 Golang은 높은 동시성 및 고성능 시스템을 구축하는 데 널리 사용됩니다.

사물인터넷과 클라우드 컴퓨팅의 급속한 발전으로 엣지 컴퓨팅이 점차 새로운 핫 영역으로 떠오르고 있습니다. 엣지 컴퓨팅은 데이터 처리 효율성을 높이고 대기 시간을 줄이기 위해 기존 클라우드 컴퓨팅 센터에서 물리적 장치의 엣지 노드로 데이터 처리 및 컴퓨팅 기능을 이전하는 것을 의미합니다. 강력한 NoSQL 데이터베이스로서 MongoDB를 엣지 컴퓨팅 분야에 적용하는 것도 점점 더 주목받고 있습니다. 1. MongoDB와 엣지 컴퓨팅의 결합 사례 엣지 컴퓨팅에서 장치는 일반적으로 제한된 컴퓨팅 및 스토리지 리소스를 갖습니다. 그리고 몽고DB

인터넷의 급속한 발전으로 인해 소프트웨어 개발은 점점 더 복잡해지고 있습니다. 이러한 과제를 해결하기 위해 소프트웨어 아키텍처도 초기 단일 애플리케이션에서 마이크로서비스 아키텍처로 계속 발전해 왔습니다. 마이크로서비스 아키텍처의 인기로 인해 점점 더 많은 개발자가 마이크로서비스 간 통신 프로토콜로 gRPC를 채택하기 시작했습니다. go-zero는 gRPC 기반의 마이크로서비스 프레임워크입니다. 이 기사에서는 Go-Zero의 아키텍처 설계 패턴과 모범 사례를 소개합니다. 1. Go-Zero 프레임워크 아키텍처 그림 1: Go-Zero 프레임워크 아키텍처 그림 1

고성능 프로그래밍 언어인 Go 언어는 분산 시스템 구축에 매우 널리 사용됩니다. 빠른 속도와 매우 낮은 대기 시간 덕분에 개발자는 확장성이 뛰어난 분산 아키텍처를 더 쉽게 구현할 수 있습니다. 분산 시스템을 구축하기 전에 고려해야 할 아키텍처 문제가 많이 있습니다. 유지 관리가 쉽고 확장 가능하며 안정적인 아키텍처를 설계하는 방법은 모든 분산 시스템 개발자가 직면한 중요한 문제입니다. Go 언어를 사용하여 분산 시스템을 구축하면 이러한 아키텍처 선택을 더 간단하고 명확하게 만들 수 있습니다. 효율적인 코루틴 Go 언어는 기본적으로 코루틴을 지원합니다.

대규모 PHP 프로젝트는 계층화된 아키텍처 또는 MVC 아키텍처와 같은 프레임워크 기반 아키텍처 설계를 채택하여 확장성, 유지 관리성 및 테스트 가능성을 달성할 수 있습니다. 계층화된 아키텍처에는 뷰 계층, 비즈니스 로직 계층 및 데이터 액세스 계층이 포함됩니다. MVC 아키텍처는 애플리케이션을 모델, 뷰 및 컨트롤러로 나눕니다. 구현 프레임워크 아키텍처는 새로운 기능을 쉽게 추가하고 유지 관리 비용을 절감하며 단위 테스트를 지원하는 모듈식 설계를 제공합니다.

쇼핑몰 SKU 관리 모듈의 건축 설계 및 PHP 코드 구현 1. 소개 전자상거래의 급속한 발전으로 인해 쇼핑몰의 규모와 복잡성도 증가하고 있습니다. 쇼핑몰의 SKU(StockKeepingUnit) 관리 모듈은 쇼핑몰의 핵심 모듈 중 하나로 상품의 재고, 가격, 속성 및 기타 정보를 관리하는 역할을 담당합니다. 이 기사에서는 쇼핑몰 SKU 관리 모듈의 아키텍처 설계 및 PHP 코드 구현을 소개합니다. 2. 아키텍처 설계 데이터베이스 설계 SKU 관리 모듈의 데이터베이스 설계는 전체 아키텍처의 기초입니다. 쇼핑몰의 SKU

고성능 PHP 마이크로서비스 아키텍처를 설계하는 방법 인터넷의 급속한 발전으로 인해 마이크로서비스 아키텍처는 많은 기업에서 고성능 애플리케이션을 구축하기 위한 첫 번째 선택이 되었습니다. 경량의 모듈식 아키텍처 스타일인 마이크로서비스는 복잡한 애플리케이션을 더 작고 독립적인 서비스 단위로 분할하여 상호 협력을 통해 더 나은 확장성, 안정성 및 유지 관리성을 제공할 수 있습니다. 이 기사에서는 고성능 PHP 마이크로서비스 아키텍처를 설계하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 마이크로서비스 분할 고성능 PHP 마이크로서비스 아키텍처를 설계하기 전에,

웹사이트 보안 아키텍처 설계 가이드: PHP 방화벽 구현 소개: 오늘날 인터넷 시대에 웹사이트 보안 문제는 점점 더 심각해지고 있습니다. 해커들은 허점을 이용해 웹사이트에 침입하거나 사용자 정보를 훔치거나 웹사이트의 정상적인 작동을 방해하는 일이 끊임없이 발생하고 있습니다. 웹사이트와 사용자의 개인정보와 보안을 보호하려면 안정적인 보안 아키텍처를 구축하는 것이 중요합니다. 이 기사에서는 PHP 방화벽 구현에 중점을 두고 웹사이트 보안 아키텍처에 대한 지침을 제공합니다. 1. PHP 방화벽이란 무엇입니까? PHP 방화벽은 악의적인 공격과 침입을 필터링하여 차단하는 보안 조치입니다.
