yourself_jquery가 작성한 jQuery 콜백의 전체 기능 코드에 대한 자세한 설명
사용법은 $.Callbacks와 완전히 동일하지만 매개 변수가 있는 추가, 제거, 실행, 비어 있음, 생성자 함수만 구현합니다. $.Callbacks에는 비활성화, 비활성화, fireWith, 실행, 잠금, 잠김 메서드도 있습니다.
코드는 다음과 같습니다.
String.prototype.trim = function ()
{
return this.replace( /^\s+|\s+$/g, '' );
};
// Simulate jQuery.Callbacks object
function MyCallbacks( options )
{
var ops = { once: false, memory: false, unique: false, stopOnFalse: false };
if ( typeof options === 'string' && options.trim() !== '' )
{
var opsArray = options.split( /\s+/ );
for ( var i = 0; i < options.length; i++ )
{
if ( opsArray[i] === 'once' )
ops.once = true;
else if ( opsArray[i] === 'memory' )
ops.memory = true;
else if ( opsArray[i] === 'unique' )
ops.unique = true;
else if ( opsArray[i] === 'stopOnFalse' )
ops.stopOnFalse = true;
}
}
var ar = [];
var lastArgs = null;
var firedTimes = 0;
function hasName( name )
{
var h = false;
if ( typeof name === 'string'
&& name !== null
&& name.trim() !== ''
&& ar.length > 0 )
{
for ( var i = 0; i < ar.length; i++ )
{
if ( ar[i].name === name )
{
h = true;
break;
}
}
}
return h;
}
// add a function
this.add = function ( fn )
{
if ( typeof fn === 'function' )
{
if ( ops.unique )
{
// check whether it had been added before
if ( fn.name !== '' && hasName( fn.name ) )
{
return this;
}
}
ar.push( fn );
if ( ops.memory )
{
// after added , call it immediately
fn.call( this, lastArgs );
}
}
return this;
};
// remove a function
this.remove = function ( fn )
{
if ( typeof ( fn ) === 'function'
&& fn.name !== ''
&& ar.length > 0 )
{
for ( var i = 0; i < ar.length; i++ )
{
if ( ar[i].name === fn.name )
{
ar.splice( i, 1 );
}
}
}
return this;
};
// remove all functions
this.empty = function ()
{
ar.length = 0;
return this;
};
// check whether it includes a specific function
this.has = function ( fn )
{
var f = false;
if ( typeof ( fn ) === 'function'
&& fn.name !== ''
&& ar.length > 0 )
{
for ( var i = 0; i < ar.length; i++ )
{
if ( ar[i].name === fn.name )
{
f = true;
break;
}
}
}
반환 f;
};
// 포함된 함수를 하나씩 호출
this.fire = function ( args )
{
if ( ops.once && FireTimes > 0 )
{
이것을 반환 ;
}
if (ar.length > 0 )
{
var r;
for ( var i = 0; i < ar.length; i )
{
r = ar[i].call( this, args );
if ( ops.stopOnFalse && r === false )
{
break;
}
}
}
FireTimes ;
if ( ops.memory )
{
lastArgs = args;
}
이것을 반품하세요.
};
};
测试函数如下:(注意fn1 fn2是匿name函数, fn2返回false, fn3是유“명”函数)
var fn1 = 함수( v )
{
console.log( 'fn1 ' ( v || '' ) );
};
var fn2 = 함수 ( v )
{
console.log( 'fn2 ' ( v || '' ) );
return false;
};
기능 fn3( v )
{
console.log( 'fn3 ' ( v || '' ) );
};
1. 테스트 추가 및 실행
var cb=new MyCallbacks();
cb.add(fn1)
cb.add(fn2)
cb.add(fn3)
cb.fire('안녕하세요')
출력:
fn1 안녕하세요
fn2 안녕하세요
fn3 안녕하세요
2. 테스트 제거
var cb=new MyCallbacks();
cb.add(fn1)
cb.add(fn2)
cb.add(fn3)
cb.remove(fn1)
cb.fire('hello')
cb.remove(fn3)
cb.fire('hello')
출력:
fn1 안녕하세요
fn2 안녕하세요
fn3 안녕하세요
-------------------------------- --
fn1 안녕하세요
fn2 안녕하세요
2. 테스트에는
var cb=new MyCallbacks();
cb.add(fn1)
cb.add(fn2)
cb.add(fn3)
cb.has(fn1)
cb.has(fn3)
출력:
거짓
---------------
그렇습니다
3. 매개변수를 사용하여 생성자를 테스트합니다: 한 번
var cb=new MyCallbacks('한 번')
cb.add(fn1)
cb.fire('안녕하세요')
cb.fire('안녕하세요')
cb.add(fn2)
cb.fire('안녕하세요')
출력:
안녕하세요
------
------
------------------
4. 매개변수를 사용하여 생성자를 테스트합니다: 메모리
var cb=new MyCallbacks('memory')
cb.add(fn1)
cb.fire('hello') // 출력: fn1 hello
cb.add(fn2) // 출력: fn2 hello
cb.fire('안녕하세요')
출력:
fn1 안녕하세요
fn2 안녕하세요
5. 매개변수를 사용하여 생성자를 테스트합니다: stopOnFalse
var cb=new MyCallbacks('stopOnFalse')
cb.add(fn1)
cb.add(fn2)
cb.add(fn3)
cb.fire('안녕하세요')
출력:
fn1 hello
fn2 hello
6. 고유 매개변수를 사용하여 생성자를 테스트합니다
var cb=new MyCallbacks('unique')
b.추가(fn3)
b.추가(fn3)
cb.fire('안녕하세요')
출력:
fn3 안녕하세요
7. 결합된 매개변수로 생성자를 테스트합니다. 4개의 설정 매개변수를 마음대로 결합할 수 있습니다. 모든 조합을 한 번에 테스트해야 합니다. 그렇지 않으면 16개의 테스트 사례를 작성해야 합니다.
var cb=new MyCallbacks('일회 메모리 고유 stopOnFalse')cb.add(fn1) // 출력: fn1
cb.add(fn2) // 출력: fn2
cb.add(fn3) // 출력: fn3
cb.fire('안녕하세요')
출력:
fn1 hello
fn2 hello
cb.fire('hello') // 출력: 출력 없음
공식 API 문서는 다음과 같습니다.
설명: 콜백 목록을 관리하는 강력한 방법을 제공하는 다목적 콜백 목록 개체입니다. $.Callbacks() 함수는 내부적으로 jQuery $.ajax() 및 $.Deferred(의 기본 기능을 제공하는 데 사용됩니다. ) 구성요소는 새로운 구성요소의 기능을 정의하기 위한 유사한 기반으로 사용될 수 있습니다.
생성자: jQuery.Callbacks( 플래그 )
flags
유형: 문자열
콜백 목록의 작동 방식을 변경하는 공백으로 구분된 플래그의 선택적 목록입니다.
가능한 플래그:
once: 콜백 목록이 한 번만 실행될 수 있도록 보장합니다( Deferred와 같음).
memory: 이전 값을 추적하고 목록이 실행된 후 추가된 모든 콜백을 최신 "기억된" 값(예: Deferred)으로 즉시 호출합니다.
고유 : 콜백을 한 번만 추가할 수 있도록 합니다(목록에 중복이 없도록 합니다).
stopOnFalse: 콜백이 false를 반환할 때 호출을 중단합니다.
기본적으로 콜백 목록은 이벤트 콜백 목록처럼 작동하며 다음을 수행할 수 있습니다. 여러 번 "해고"당했습니다.
콜백을 사용하여 게시-구독 모드 게시/구독 구현: (공식 문서)
var 주제 = {};
jQuery.Topic = 함수( id )
{
var 콜백,
메소드,
주제 = id && 주제[id];
if ( !topic )
{
콜백 = jQuery.Callbacks();
주제 = {
게시: callbacks.fire,
구독: callbacks.add,
구독 취소: callbacks.remove
};
if ( id )
{
주제[id] = 주제;
}
}
주제 반환;
};
사용
$.Topic( 'mailArrived' ).subscribe( function ( e )
{
console.log( '새 이메일이 있습니다! ' );
console.log( "메일 제목 : " e.title );
console.log( "메일 내용 : " e.content );
}
);
$.Topic( 'mailArrived' ).publish( { title: 'mail title', content: 'mail content' } );
具体代码如下, 有兴趣和时间的可以对PhotojQuery특별콜백对比下 :
( function ( window, undefined )
{
// Simulate jQuery.Callbacks object
function Callbacks( options )
{
var ops = { once: false, memory: false, unique: false, stopOnFalse: false },
ar = [],
lastArgs = null,
firedTimes = 0,
_disabled = false,
_locked = false;
if ( typeof options === 'string' && options.trim() !== '' )
{
var opsArray = options.split( /\s+/ );
for ( var i = 0; i < options.length; i++ )
{
if ( opsArray[i] === 'once' )
ops.once = true;
else if ( opsArray[i] === 'memory' )
ops.memory = true;
else if ( opsArray[i] === 'unique' )
ops.unique = true;
else if ( opsArray[i] === 'stopOnFalse' )
ops.stopOnFalse = true;
}
}
function hasName( name )
{
var h = false;
if ( typeof name === 'string'
&& name !== null
&& name.trim() !== ''
&& ar.length > 0 )
{
for ( var i = 0; i < ar.length; i++ )
{
if ( ar[i].name === name )
{
h = true;
break;
}
}
}
return h;
}
// add a function
this.add = function ( fn )
{
if ( typeof fn === 'function' )
{
if ( ops.unique )
{
// check whether it had been added before
if ( fn.name !== '' && hasName( fn.name ) )
{
return this;
}
}
ar.push( fn );
if ( ops.memory )
{
// after added , call it immediately
fn.call( this, lastArgs );
}
}
return this;
};
// remove a function
this.remove = function ( fn )
{
if ( typeof ( fn ) === 'function'
&& fn.name !== ''
&& ar.length > 0 )
{
for ( var i = 0; i < ar.length; i++ )
{
if ( ar[i].name === fn.name )
{
ar.splice( i, 1 );
}
}
}
return this;
};
// remove all functions
this.empty = function ()
{
ar.length = 0;
return this;
};
// check whether it includes a specific function
this.has = function ( fn )
{
var f = false;
if ( typeof ( fn ) === 'function'
&& fn.name !== ''
&& ar.length > 0 )
{
for ( var i = 0; i < ar.length; i++ )
{
if ( ar[i].name === fn.name )
{
f = true;
break;
}
}
}
return f;
};
this.disable = function ()
{
_disabled = true;
return this;
};
this.disabled = function ()
{
return _disabled;
};
this.fired = function ()
{
return firedTimes > 0;
};
function _fire( context, args )
{
if ( _disabled || ops.once && firedTimes > 0 || _locked )
{
return;
}
if ( ar.length > 0 )
{
var r;
for ( var i = 0; i < ar.length; i++ )
{
r = ar[i].call( context, args );
if ( ops.stopOnFalse && r === false )
{
break;
}
}
}
firedTimes++;
if ( ops.memory )
{
lastArgs = args;
}
};
this.fireWith = function ( context, args )
{
context = context || this;
_fire( context, args );
return this;
};
this.fire = function ( args )
{
_fire( this, args );
return this;
};
this.lock = function ()
{
_locked = true;
return this;
};
this.locked = function ()
{
return _locked;
};
};
// 팩토리 메서드로 전역에 노출
window.callbacks = function ( options )
{
새 콜백 반환( options );
};
} )( 창 );

핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

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

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

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

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

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

뜨거운 주제











jQuery 참조 방법에 대한 자세한 설명: 빠른 시작 가이드 jQuery는 웹 사이트 개발에 널리 사용되는 JavaScript 라이브러리로, JavaScript 프로그래밍을 단순화하고 개발자에게 풍부한 기능을 제공합니다. 이 기사에서는 jQuery의 참조 방법을 자세히 소개하고 독자가 빠르게 시작할 수 있도록 구체적인 코드 예제를 제공합니다. jQuery 소개 먼저 HTML 파일에 jQuery 라이브러리를 도입해야 합니다. CDN 링크를 통해 소개하거나 다운로드할 수 있습니다.

jQuery에서 PUT 요청 방법을 사용하는 방법은 무엇입니까? jQuery에서 PUT 요청을 보내는 방법은 다른 유형의 요청을 보내는 것과 유사하지만 몇 가지 세부 사항과 매개 변수 설정에 주의해야 합니다. PUT 요청은 일반적으로 데이터베이스의 데이터 업데이트 또는 서버의 파일 업데이트와 같은 리소스를 업데이트하는 데 사용됩니다. 다음은 jQuery에서 PUT 요청 메소드를 사용하는 구체적인 코드 예제입니다. 먼저 jQuery 라이브러리 파일을 포함했는지 확인한 다음 $.ajax({u를 통해 PUT 요청을 보낼 수 있습니다.

jQuery는 프런트엔드 개발에 널리 사용되는 빠르고, 작고, 기능이 풍부한 JavaScript 라이브러리입니다. 2006년 출시 이후 jQuery는 많은 개발자가 선택하는 도구 중 하나가 되었지만 실제 애플리케이션에서는 몇 가지 장점과 단점도 있습니다. 이 기사에서는 jQuery의 장점과 단점을 심층적으로 분석하고 구체적인 코드 예제를 통해 설명합니다. 장점: 1. 간결한 구문 jQuery의 구문 디자인은 간결하고 명확하여 코드의 가독성과 쓰기 효율성을 크게 향상시킬 수 있습니다. 예를 들어,

jQuery를 사용하여 요소의 높이 속성을 제거하는 방법은 무엇입니까? 프런트엔드 개발에서는 요소의 높이 속성을 조작해야 하는 경우가 종종 있습니다. 때로는 요소의 높이를 동적으로 변경해야 할 수도 있고 요소의 높이 속성을 제거해야 하는 경우도 있습니다. 이 기사에서는 jQuery를 사용하여 요소의 높이 속성을 제거하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. jQuery를 사용하여 높이 속성을 연산하기 전에 먼저 CSS의 높이 속성을 이해해야 합니다. height 속성은 요소의 높이를 설정하는 데 사용됩니다.

제목: jQuery 팁: 페이지에 있는 모든 태그의 텍스트를 빠르게 수정하세요. 웹 개발에서는 페이지의 요소를 수정하고 조작해야 하는 경우가 많습니다. jQuery를 사용할 때 페이지에 있는 모든 태그의 텍스트 내용을 한 번에 수정해야 하는 경우가 있는데, 이는 시간과 에너지를 절약할 수 있습니다. 다음은 jQuery를 사용하여 페이지의 모든 태그 텍스트를 빠르게 수정하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 먼저 jQuery 라이브러리 파일을 도입하고 다음 코드가 페이지에 도입되었는지 확인해야 합니다. <

제목: jQuery를 사용하여 모든 태그의 텍스트 내용을 수정합니다. jQuery는 DOM 작업을 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. 웹 개발을 하다 보면 페이지에 있는 링크 태그(태그)의 텍스트 내용을 수정해야 하는 경우가 종종 있습니다. 이 기사에서는 jQuery를 사용하여 이 목표를 달성하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. 먼저 페이지에 jQuery 라이브러리를 도입해야 합니다. HTML 파일에 다음 코드를 추가합니다.

jQuery는 웹 페이지에서 DOM 조작 및 이벤트 처리를 처리하는 데 널리 사용되는 인기 있는 JavaScript 라이브러리입니다. jQuery에서 eq() 메서드는 지정된 인덱스 위치에서 요소를 선택하는 데 사용됩니다. 구체적인 사용 및 적용 시나리오는 다음과 같습니다. jQuery에서 eq() 메서드는 지정된 인덱스 위치에 있는 요소를 선택합니다. 인덱스 위치는 0부터 계산되기 시작합니다. 즉, 첫 번째 요소의 인덱스는 0이고 두 번째 요소의 인덱스는 1입니다. eq() 메소드의 구문은 다음과 같습니다: $("s

jQuery 요소에 특정 속성이 있는지 어떻게 알 수 있나요? jQuery를 사용하여 DOM 요소를 조작할 때 요소에 특정 속성이 있는지 확인해야 하는 상황이 자주 발생합니다. 이 경우 jQuery에서 제공하는 메소드를 사용하여 이 기능을 쉽게 구현할 수 있습니다. 다음은 jQuery 요소에 특정 속성이 있는지 확인하기 위해 일반적으로 사용되는 두 가지 방법을 특정 코드 예제와 함께 소개합니다. 방법 1: attr() 메서드와 typeof 연산자를 // 사용하여 요소에 특정 속성이 있는지 확인
