jquery로 자바스크립트 코드 정리(js 기능화)_기본지식
마법의 "$" 함수로 시작하기
"$" 함수는 문서가 로드된 후 이벤트를 지정된 버튼에 바인딩합니다. 이 코드는 단일 웹 페이지에서 잘 작동합니다. 하지만 다른 페이지가 있으면 이 과정을 반복해야 합니다.
버튼에 다른 작업이 필요한 경우 어떻게 해야 할까요? 예를 들면 다음과 같습니다.
그러나 모든 페이지에서 이 두 가지 버튼을 순서대로 사용하지는 않습니다. 페이지에서 추가 선택기를 사용하려면 몇 가지 필요한 조정을 해야 합니다. 클래스 기반 선택기의 성능은 ID 선택기에 비해 매우 비싸기 때문입니다. 모든 DOM 요소를 탐색하고 클래스 속성을 일치시키기 위해 정규식을 사용해야 합니다. 조건을 만족하는 요소를 선택합니다.
코드 복사
저희 프로젝트 기능은 시간이 지나면서 점점 더 복잡해지고 있습니다. 이렇게 빠르지만 지저분해졌습니다...
코드 복사
코드는 다음과 같습니다:
if($page == 'A' or $page == "C" and $page is not "D" ){ ?> ;
< } if ($page == "B" 또는 $page == "E"이고 $page가 "X"가 아닙니다){ ?> < } ?> if($page == "B" 또는 $page == "C"){ ?> ?> ;
이것은 정말 나쁜 일입니다. 모든 이벤트를 바인딩하려면 한 페이지에 많은 코드 조각을 로드해야 합니다. 여러 js 파일에 서로 다른 코드를 로드하면 여러 페이지의 리소스 소비가 증가하게 됩니다. 관리 및 사용자 경험과 관련하여 더 나은 솔루션을 찾아야 합니다.
클래스 선택기의 오버헤드가 너무 높기 때문에 모든 이벤트를 한 번의 스캔으로 바인딩할 수 있나요? 시도해 볼 수 있습니다.
<스크립트 유형 ="text /javascript">
//전역 이름 공간을 등록합니다.
var Yottaa || {}
Yottaa.EventMonitor = function(){
this.listeners = {} ;
}
//모든 이벤트 바인딩
Yottaa.EventMonitor.prototype.subscribe=function(msg, callback){
var lst = this.listeners[msg]; lst) {
lst.push(callback);
} else {
this.listeners[msg] = [callback];
}
}
// 이벤트 모니터 생성 instance.
var event_monitor = new Yottaa.EventMonitor();
function load_event_monitor(root){
var re = /a_(w )/; //모든 이벤트 객체를 필터링합니다. 🎜>var fns = {};
$(".j", root).each(function(i) {
var m = re.exec(this.className);
if (m) {
var f = fns[m[1]];
if (!f) { //이벤트 핸들러 함수가 없으면 함수 객체를 생성합니다.
f = eval("Yottaa. init_" m[1] );
fns[m[1]] = f;//바인딩 함수를 호출합니다.
}
f && f(this);
}
} );
}
$(function(){
// DOM이 준비되면 모든 이벤트를 바인딩합니다.
load_event_monitor(document);
}); 샘플 구성요소
Yottaa.init_sayhello = function(obj){
$(obj).click(function(){
alert('Hello world!');
}); }
Yottaa.init_unlike = function(obj){
$(obj).click(function(){
alert('좋아요.');
});
script>
DOM 요소는 다음과 같이 작성됩니다.
Say Hello a>
< a href="javascript:;" class="j a_unlike">Say Like
이 처리 모드에서는 이벤트 처리 로직을 수동으로 다시 작성하고 이를 $(function(){ .... })과 같은 초기화 함수에 넣을 필요가 없습니다. 구성 요소의 "컨테이너"에 두 개의 클래스를 추가합니다: "j a_XXX". 이 프로그램은 이벤트 바인딩 작업을 완료하는 데 도움이 됩니다. 일반적으로 사용되는 확장/축소 효과, 전체/역 선택 효과 등이 멋지지 않나요? 탭 전환 등에 이 방법을 사용할 수 있습니다. 이것이 전설적인 은총알이 될 수 있을까? 아니요, 그렇게 간단하지는 않습니다. 이 접근 방식에는 몇 가지 약점이 있습니다.
초기화 매개변수를 구성 요소에 전달할 수 없습니다.
구성요소의 포함 관계를 반영할 수 없으며, 프로그램을 더 쉽게 작성하고 이해하기 위해 상속, 다형성과 같은 객체지향 기능을 사용할 수도 없습니다.
특정 관계가 있는 일부 구성 요소를 처리하는 것은 약간 번거롭고 합리적인 이벤트 알림 메커니즘이 없습니다.
첫 번째를 살펴보겠습니다. 매개변수 전달과 관련하여 여러 항목 목록에 대한 많은 시나리오에서 일반적으로 각 항목에 해당하는 요소에 고유 ID를 할당합니다. 유일한 차이점은 메시지 목록이나 제품 목록과 같은 서버 측의 숫자입니다. 아래 코드를 보면 id 속성을 사용하여 항목에 해당하는 서버 측 번호를 JavaScript에 알리고 서버의 일부로 다시 서버 측으로 보낼 수 있습니다. 후속 이벤트 로직 처리의 콜백 함수 매개변수입니다.
코드 복사
동일한 작업을 수행하지만 서버측 식별자가 다른 버튼
더 복잡한 시나리오에서는 페이지의 인라인 코드를 사용하여 일부 필수 정보를 구성 요소에 전달할 수 있습니다.
Yottaa.globalConst = {
사용자 :{
familyName: "Jhone",
givenName: 'bruce'
},
Url:{
siteName: 'yottaa.com',
점수: 98
}
}
Yottaa.comComponentMetaData = {
compoment_id_1:{ ...... },
comComponent_id_2:{ ...... }
}; >
위에서는 가능한 코드 구성 방법을 논의하지만 모든 프로젝트에 적합하지는 않습니다. 우리가 해야 할 일은 현재 상태를 기반으로 상대적으로 저렴한 리팩토링 솔루션을 찾는 것입니다. 다음 사항을 고려합니다.
이벤트 바인딩 및 처리 로직: 다양한 구성요소에 따라 여러 모듈로 구분되며, 각 모듈은 함수에 배치됩니다.
페이지는 이 페이지에서 초기화할 모듈을 지정하고 전역 이벤트 바인더에 의한 통합 처리를 위한 목록을 제공해야 합니다.
코드의 일부를 보여드리겠습니다.
var 컨테이너 = $('login_panel')
$('#login_button').click( function(){
......
})
}
function init_chart = function(){
......
}
/ /전역 정적 초기화 방법
Yottaa.initComponents = function(comComponents){
for(var i = 0;i
window[comComponents[i]]();
}
}
}
// 위의 내용은 'all-in-one' 자산 파일에 있습니다.
var Components = ['init_loginPanel', 'init_chart']
var MetaData = {
loginPanel: {},
chart: {},
.... ..
};
$(function(){
Yottaa.initComponents(comComponents);
})
//여기에 페이지의 인라인 스크립트가 있습니다. 🎜>< /스크립트>

핫 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)

뜨거운 주제











Go 언어는 클로저와 리플렉션이라는 두 가지 동적 함수 생성 기술을 제공합니다. 클로저는 클로저 범위 내의 변수에 대한 액세스를 허용하며 리플렉션은 FuncOf 함수를 사용하여 새 함수를 생성할 수 있습니다. 이러한 기술은 HTTP 라우터를 사용자 정의하고 고도로 사용자 정의 가능한 시스템을 구현하며 플러그 가능한 구성 요소를 구축하는 데 유용합니다.

C++ 함수 이름 지정에서는 가독성을 높이고 오류를 줄이며 리팩토링을 용이하게 하기 위해 매개변수 순서를 고려하는 것이 중요합니다. 일반적인 매개변수 순서 규칙에는 작업-객체, 개체-작업, 의미론적 의미 및 표준 라이브러리 준수가 포함됩니다. 최적의 순서는 함수의 목적, 매개변수 유형, 잠재적인 혼동 및 언어 규칙에 따라 달라집니다.

효율적이고 유지 관리 가능한 Java 함수를 작성하는 핵심은 단순함을 유지하는 것입니다. 의미 있는 이름을 사용하세요. 특별한 상황을 처리합니다. 적절한 가시성을 사용하십시오.

1. SUM 함수는 열이나 셀 그룹의 숫자를 합하는 데 사용됩니다(예: =SUM(A1:J10)). 2. AVERAGE 함수는 열이나 셀 그룹에 있는 숫자의 평균을 계산하는 데 사용됩니다(예: =AVERAGE(A1:A10)). 3. COUNT 함수, 열이나 셀 그룹의 숫자나 텍스트 수를 세는 데 사용됩니다. 예: =COUNT(A1:A10) 4. IF 함수, 지정된 조건을 기반으로 논리적 판단을 내리고 결과를 반환하는 데 사용됩니다. 해당 결과.

C++ 함수에서 기본 매개변수의 장점에는 호출 단순화, 가독성 향상, 오류 방지 등이 있습니다. 단점은 제한된 유연성과 명명 제한입니다. 가변 매개변수의 장점에는 무제한의 유연성과 동적 바인딩이 포함됩니다. 단점은 더 큰 복잡성, 암시적 유형 변환 및 디버깅의 어려움을 포함합니다.

C++에서 참조 유형을 반환하는 함수의 이점은 다음과 같습니다. 성능 개선: 참조로 전달하면 객체 복사가 방지되므로 메모리와 시간이 절약됩니다. 직접 수정: 호출자는 반환된 참조 객체를 다시 할당하지 않고 직접 수정할 수 있습니다. 코드 단순성: 참조로 전달하면 코드가 단순화되고 추가 할당 작업이 필요하지 않습니다.

사용자 정의 PHP 함수와 사전 정의된 함수의 차이점은 다음과 같습니다. 범위: 사용자 정의 함수는 정의 범위로 제한되는 반면, 사전 정의된 함수는 스크립트 전체에서 액세스할 수 있습니다. 정의 방법: 사용자 정의 함수는 function 키워드를 사용하여 정의되는 반면, 사전 정의된 함수는 PHP 커널에 의해 정의됩니다. 매개변수 전달: 사용자 정의 함수는 매개변수를 수신하지만 사전 정의된 함수에는 매개변수가 필요하지 않을 수 있습니다. 확장성: 필요에 따라 사용자 정의 함수를 생성할 수 있으며 사전 정의된 함수는 내장되어 있어 수정할 수 없습니다.

C++의 예외 처리는 특정 오류 메시지, 상황별 정보를 제공하고 오류 유형에 따라 사용자 지정 작업을 수행하는 사용자 지정 예외 클래스를 통해 향상될 수 있습니다. 특정 오류 정보를 제공하려면 std::Exception에서 상속된 예외 클래스를 정의하세요. 사용자 정의 예외를 발생시키려면 throw 키워드를 사용하십시오. try-catch 블록에서 Dynamic_cast를 사용하여 발견된 예외를 사용자 지정 예외 유형으로 변환합니다. 실제 경우 open_file 함수는 FileNotFoundException 예외를 발생시킵니다. 예외를 포착하고 처리하면 보다 구체적인 오류 메시지가 제공될 수 있습니다.
