이 기사의 예에서는 JavaScript의 맞춤 이벤트 사용법을 설명합니다. 참고할 수 있도록 모든 사람과 공유하세요. 구체적인 분석은 다음과 같습니다.
웹 프론트엔드 개발에서는 많은 사람들이 js의 커스텀 이벤트를 사용하지 않을 수도 있지만, 상대적으로 큰 프로젝트를 수행하는 경우, 특히 여러 사람이 공동으로 개발하는 경우 커스텀 이벤트가 매우 중요합니다. 그렇다면 js의 사용자 정의 이벤트는 무엇입니까? 먼저 예를 살펴보겠습니다.
프런트엔드 개발자 A는 다음과 같은 기능을 캡슐화합니다.
잠시 후 프런트엔드 개발자 B는 A를 기반으로 이 기능을 강화할 것이므로 다음과 같이 작성합니다.
문제를 발견하셨나요? B는 A의 변수, 함수 등과 관련된 이름 지정 및 충돌 문제에 주의해야 합니다. 잠시 후 프런트엔드 개발자 C도 이 기능을 강화할 예정입니다.
이때는 매우 답답할 것이고, C로 코드를 작성하는 것도 쉽지 않을 것이라 확신합니다. 이 문제를 해결하는 방법은 다음과 같이 서로 영향을 주지 않고 동일한 이벤트를 요소에 추가할 수 있다는 것을 알고 있습니다.
페이지를 클릭하면 1과 2가 모두 팝업되며, 다음 방법을 사용하여 함수를 정의할 수 있습니다.
이런 식으로 move();를 실행하면 3번과 4번이 팝업됩니다. 여기서 이동은 실제로는 함수인 커스텀 이벤트입니다
이벤트 핸들러에 매개변수를 전달하는 방법을 살펴보겠습니다.
함수 createFunction(obj, strFunc) {
var args = []; //이벤트 핸들러에 전달된 매개변수를 저장할 args를 정의합니다.
If (!obj) obj = window; //전역 함수인 경우 obj=window;
//이벤트 핸들러에 전달된 매개변수 가져오기
for (var i = 2; i
//매개변수 없는 함수를 사용하여 이벤트 핸들러 호출을 캡슐화합니다.
반환 함수() {
obj[strFunc].apply(obj, args) // 지정된 이벤트 핸들러에 매개변수 전달
}
}
함수 클래스1() {
}
class1.prototype = {
표시: 함수() {
This.onShow();
},
onShow: 함수() { }
}
함수 objOnShow(userName) {
Alert("안녕하세요," userName);
}
함수 테스트() {
var obj = new class1();
var userName = "테스트";
obj.onShow = createFunction(null, "objOnShow", userName);
Obj.show();
}
"이벤트 메커니즘은 매개변수 정보 없이 함수 이름만 전달하기 때문에 매개변수를 전달할 수 없습니다." "이 문제를 해결하려면 반대 방향으로 생각해 볼 수 있습니다. 매개변수를 전달하는 방법에 대해 생각하고 매개변수 없이 이벤트 핸들러를 작성하는 방법을 고려하십시오. 이 프로그램은 매개변수가 있는 이벤트 핸들러를 기반으로 작성되었으며 여기서 "프로그램"은 createFunction.함수를 교묘하게 사용합니다. 매개변수가 있는 함수를 매개변수 없는 함수로 캡슐화하는 Apply 함수입니다. 마지막으로 맞춤 이벤트의 다중 바인딩을 구현하는 방법을 살펴보겠습니다.
// 맞춤 이벤트에서 다중 바인딩을 지원하도록 설정
//매개변수가 있는 함수를 매개변수가 없는 함수로 캡슐화
함수 createFunction(obj, strFunc) {
var args = []; //이벤트 핸들러에 전달된 매개변수를 저장할 args를 정의합니다.
If (!obj) obj = window; //전역 함수인 경우 obj=window;
//이벤트 핸들러에 전달된 매개변수 가져오기
for (var i = 2; i
//매개변수 없는 함수를 사용하여 이벤트 핸들러 호출을 캡슐화합니다.
반환 함수() {
obj[strFunc].apply(obj, args) // 지정된 이벤트 핸들러에 매개변수 전달
}
}
함수 클래스1() {
}
class1.prototype = {
표시: 함수() {
if (this.onShow) {
for (var i = 0; i < this.onShow.length; i ) {
This.onShow[i]();
}
}
},
AttachOnShow: 함수(_eHandler) {
If (!this.onShow) { this.onShow = [] }
This.onShow.push(_eHandler);
}
}
함수 objOnShow(userName) {
Alert("안녕하세요," userName);
}
함수 objOnShow2(testName) {
Alert("표시:" testName);
}
함수 테스트() {
var obj = new class1();
var userName = "당신의 이름";
Obj.attachOnShow(createFunction(null, "objOnShow", userName));
Obj.attachOnShow(createFunction(null, "objOnShow2", "테스트 메시지"));
Obj.show();
}
AttachOnShow 메소드의 기본 아이디어는 배열을 푸시하는 것임을 알 수 있습니다. 실제로 이벤트 실행이 완료된 후 이벤트 처리 기능을 제거할 수도 있습니다.
코드 복사 코드는 다음과 같습니다.//매개변수가 있는 함수를 매개변수가 없는 함수로 캡슐화
함수 createFunction(obj, strFunc) {
var args = []; //이벤트 핸들러에 전달된 매개변수를 저장할 args를 정의합니다.
If (!obj) obj = window; //전역 함수인 경우 obj=window;
//이벤트 핸들러에 전달된 매개변수 가져오기
for (var i = 2; i
//매개변수 없는 함수를 사용하여 이벤트 핸들러 호출을 캡슐화합니다.
반환 함수() {
obj[strFunc].apply(obj, args) // 지정된 이벤트 핸들러에 매개변수 전달
}
}
함수 클래스1() {
}
class1.prototype = {
표시: 함수() {
if (this.onShow) {
for (var i = 0; i < this.onShow.length; i ) {
This.onShow[i]();
}
}
},
attachmentOnShow: function(_eHandler) { // 이벤트 첨부
If (!this.onShow) { this.onShow = [] }
This.onShow.push(_eHandler);
},
detachOnShow: function(_eHandler) { // 이벤트 제거
If (!this.onShow) { this.onShow = [] }
This.onShow.pop(_eHandler);
}
}
함수 objOnShow(userName) {
Alert("안녕하세요," userName);
}
함수 objOnShow2(testName) {
Alert("표시:" testName);
}
함수 테스트() {
var obj = new class1();
var userName = "당신의 이름";
Obj.attachOnShow(createFunction(null, "objOnShow", userName));
Obj.attachOnShow(createFunction(null, "objOnShow2", "테스트 메시지"));
Obj.show();
obj.detachOnShow(createFunction(null, "objOnShow", userName));
Obj.show(); // 하나를 제거하고 나머지 하나를 표시합니다
obj.detachOnShow(createFunction(null, "objOnShow2", "테스트 메시지"));
Obj.show(); // 둘 다 제거하고 둘 다 표시하지 않음
}
이 기사가 모든 사람의 JavaScript 프로그래밍 설계에 도움이 되기를 바랍니다.