함수 하이재킹은 이름에서 알 수 있듯이 함수가 실행되기 전에 함수를 하이재킹하여 원하는 기능을 추가합니다. 이 함수가 실제로 실행되면 더 이상 원래의 함수가 아니고 우리가 추가한 함수를 갖게 됩니다. 이는 또한 일반적인 후크 기능의 원칙 중 하나입니다.
얼핏 보면 이는 함수를 다시 작성한 것처럼 보입니다. 함수 재작성도 일종의 함수 하이재킹으로 이해될 수 있는데 이 방법은 너무 역겹다. 납치범으로서 납치로 인해 이익을 얻은 후 직업 윤리를 준수하고 사람을 그대로 돌려 보내야하므로 적절한 위치에 기능의 원래 기능을 다시 호출해야합니다.
실제로 우리는 '하이재킹'이라는 개념을 자주 접하게 됩니다. 예를 들어 웹사이트가 운영자에 의해 하이재킹되면 웹사이트를 탐색할 때 운영자의 광고가 팝업됩니다.
이제 간단한 예를 들어 보겠습니다. Alert() 함수를 하이재킹하고 여기에 약간의 기능을 추가해 보겠습니다.
let warn = alertwindow.alert = (t) => { if (confirm('How are you?')) warn(t) } alert('Help me...!!!')
개발자 도구를 열고 이 예를 시도해 보면 당신만이 확인하는 유일한 사람이라는 것을 알게 될 것입니다. 확인을 클릭하면 도와주세요...!!!가 나타납니다.
다음으로 콘텐츠의 이 부분을 일반 함수로 캡슐화합니다.
const hijack = (obj, method, fun) => { let orig = obj[method] obj[method] = fun(orig) }
먼저 원래 함수를 저장한 다음 사용자 정의 함수를 실행하는 하이재킹 함수를 정의합니다. 그러면 원래 함수는 사용자 정의 내부에서 호출을 수행합니다. 기능.
그런 다음 verify() 함수를 하이재킹해 보겠습니다.
hijack(window, 'confirm', (orig) => { return (text) => { alert('HELP ME PLZ!!!') if (orig.call(this, text)) { alert('YOU SEEMS FINE AND I AM LEAVING, GOOD BYE!') } else { alert('HOLD ON! I AM COMING!!') } } })
이 함수의 기능은 매우 간단하므로 자세히 설명하지 않겠습니다. 단지 verify()를 호출하면 다음을 알 수 있습니다.
만들기 새 페이지를 열고 개발을 엽니다. 도구 콘솔로 이동하여 경고를 입력하면 다음과 같은 출력이 표시됩니다.
function alert() { [native code] }
그런 다음 이 문서의 시작 부분에 있는 코드를 사용하여 경고()를 하이재킹하고 콘솔에 다시 경고를 입력합니다. 다음과 같은 출력이 표시됩니다.
function (t) => { if (confirm('How are you?')) warn(t) }
위의 예에서 함수가 하이재킹되었는지 확인하려면 함수를 직접 인쇄하기만 하면 된다는 것을 알 수 있습니다. 시스템 고유 기능의 경우 [네이티브 코드]는 순수하고 오염이 없음을 의미합니다.
관련 권장사항:
Javascript 함수 하이재킹에 대한 간략한 토론 [xfocus에서 다시 게시]_javascript 기술
위 내용은 JavaScript의 함수 하이재킹 예제에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!