JavaScript_javascript 스킬 중 Apply, Call 및 this 사용에 대한 간단한 비교 분석
1.정의 적용
적용: 함수를 호출하고, 함수의 this 값을 지정된 객체로 바꾸고, 함수의 매개변수를 지정된 배열로 바꿉니다.
구문: apply([thisObj[,argArray]])
이Obj
선택 과목. 이 개체로 사용할 개체입니다.
argArray
선택 과목. 함수에 전달될 인수 집합입니다.
2.콜 정의
call: 객체의 메서드를 호출하고 현재 객체를 다른 객체로 바꿉니다.
구문: call([thisObj[, arg1[, arg2[, [, argN]]]]])
이Obj
선택 과목. 현재 객체로 사용될 객체입니다.
arg1, arg2, , argN
선택 과목. 메소드에 전달될 매개변수 목록입니다.
3. 둘의 차이점
call의 두 번째 매개변수는 모든 유형이 될 수 있지만 Apply의 두 번째 매개변수는 배열 또는 인수여야 합니다.
정의에도 차이가 있습니다.
4. 예시 분석
(1) 공식 예:
function callMe(arg1, arg2){ var s = ""; s += "this value: " + this; s += "<br />"; for (i in callMe.arguments) { s += "arguments: " + callMe.arguments[i]; s += "<br />"; } return s; } document.write("Original function: <br/>"); document.write(callMe(1, 2)); document.write("<br/>"); document.write("Function called with apply: <br/>"); document.write(callMe.apply(3, [ 4, 5 ])); document.write(callMe.call(3, 4, 5 )); // Output: // Original function: // this value: [object Window] // arguments: 1 // arguments: 2 // Function called with apply: // this value: 3 // arguments: 4 // arguments: 5
적용을 사용한 첫 번째 방법: 정의: 함수를 호출하고 함수의 this 값을 지정된 개체로 바꿉니다
callMe 함수를 호출하고 callMe 함수에서 이를 지정된 객체 3으로 대체합니다. 이때 여기에서는 이전 [객체 창]에서 3으로 변경됩니다.
첫 번째는 호출을 사용합니다. 정의: 개체의 메서드를 호출하고 현재 개체를 다른 개체로 바꿉니다.
callMe 객체의 메소드를 호출하고 callMe의 객체를 다른 객체로 교체합니다. 3.
이들 결과를 분석해 보면 둘 다 지정된 객체의 객체를 사용하거나 지정된 값을 사용하여 객체에서 이를 변경하는 것을 알 수 있습니다.
함수의 객체(this)가 실행될 다른 함수의 객체(this)를 "하이재킹"한다고 말할 수도 있습니다.
사실 이는 다음과 같은 질문을 제기합니다. 이것이 정확히 무엇입니까? 방향을 계속해서 바꾸기 위해 그토록 많은 어려움을 겪는 것이 왜 그토록 중요합니까?
(2) 예:
function zqz(a,b){ return alert(a+b); } function zqz_1(a,b){ zqz.apply(zqz_1,[a,b]) } zqz_1(1,2) //->3
분석: 정의에 따르면: 함수를 호출하고 함수의 this 값을 지정된 개체로 바꿉니다.
여기서 zqz 함수가 호출되고 zqz 함수의 this 값이 지정된 객체 zqz_1로 대체됩니다.
함수 이름은 Function 객체에 대한 참조이기 때문에 js의 함수 이름은 실제로 객체라는 점에 유의하세요!
function add(a, b) { alert(a + b); } function sub(a, b) { alert(a - b); } add.call(sub, 3, 1); // 4
분석: 정의에 따르면: 개체의 메서드를 호출하고 현재 개체를 다른 개체로 바꿉니다.
add 개체를 호출하고 현재 개체 sub를 add 개체로 바꾸는 방법은 다음과 같습니다.
또 다른 예:
function zqz(a,b){ this.name=a; this.age=b; alert(this.name+" "+this.age); } function zqz_1(a,b){ zqz.apply(this,[a,b]) //我们亦可以这么写 zqz.apply(this,arguments) } zqz_1("Nic",12) //Nic 12
분석: 정의에 따르면: 함수를 호출하고 함수의 this 값을 지정된 개체로 바꿉니다.
여기서는 zqz 함수의 this를 대체하기 위해 지정된 객체 this를 사용하여 zqz 함수가 호출됩니다.
또 다른 예:
<input type="text" id="myText" value="input text"> function Obj(){ this.value="对象!"; } var value="global 变量"; function Fun1(){ alert(this.value); } Fun1(); //global 变量 Fun1.call(window); //global 变量 Fun1.call(document.getElementById('myText')); //input text Fun1.call(new Obj()); //对象! Fun1(); //global 变量
분석: 정의: 현재 객체를 다른 객체로 대체하기 위해 객체의 메소드를 호출합니다.
Fun1 개체의 메서드를 호출하여 Fun1의 현재 개체를 창 개체로 바꿉니다.
Fun1 객체의 메서드를 호출하고 Fun1의 현재 객체를 입력의 객체로 바꿉니다.
Fun1 개체의 메서드를 호출하고 현재 Fun1의 개체를 새 obj의 개체로 바꿉니다.
한 네티즌이 제기한 질문을 살펴보겠습니다.
호출 메소드는 다른 객체를 대신하여 메소드를 호출하는 데 사용될 수 있습니다. call 메소드는 함수의 객체 컨텍스트를 초기 컨텍스트에서 thisObj가 지정한 새 객체로 변경합니다. thisObj 매개변수가 제공되지 않으면 Global 개체가 thisObj로 사용됩니다.
그래서 케이스를 직접 작성했는데, 제가 상상했던 코드와는 달랐습니다
function parent() { alert(this.name); } function child() { var name = '张三'; }; parent.call(child);
그가 출력하는 것은 child입니다. 위 문장에 따르면 부모 컨텍스트는 child가 됩니다.
그리고 child에 이름 값이 있는데, 출력은 Zhang San이어야 합니다.
function parent() { alert(this.name); } function child() { this.name = '张三'; }; var p1 = new child(); parent.call(p1);
이것은 Zhang San Why를 출력할 수 있습니까?
무슨 일이 일어나는지 살펴보겠습니다
call과 Apply의 용도는 변수를 함수 이름으로 사용하여 호출할 수 있다는 것입니다. 예를 들어 함수의 콜백 함수입니다. 구체적인 사용법은 다음과 같습니다: 실행된 function.call(a,b,c...). 여기서 a는 실행된 함수에서 지정해야 하는 개체이며 null일 수 있으며 다른 매개변수는 실행된 기능. Apply의 사용법은 두 번째 매개변수가 배열이라는 점을 제외하면 비슷합니다.
예:
function doPost(url,param,callback){ //这里处理post请求 var str = xhr.responseText; callback.apply(this,[str]);//相当于调用了callback(str);并把callback中的this设定为doPost对象 }

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

뜨거운 주제











WebSocket 및 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법 소개: 지속적인 기술 개발로 음성 인식 기술은 인공 지능 분야의 중요한 부분이 되었습니다. WebSocket과 JavaScript를 기반으로 한 온라인 음성 인식 시스템은 낮은 대기 시간, 실시간, 크로스 플랫폼이라는 특징을 갖고 있으며 널리 사용되는 솔루션이 되었습니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 음성 인식 시스템을 구현하는 방법을 소개합니다.

WebSocket과 JavaScript: 실시간 모니터링 시스템 구현을 위한 핵심 기술 서론: 인터넷 기술의 급속한 발전과 함께 실시간 모니터링 시스템이 다양한 분야에서 널리 활용되고 있다. 실시간 모니터링을 구현하는 핵심 기술 중 하나는 WebSocket과 JavaScript의 조합입니다. 이 기사에서는 실시간 모니터링 시스템에서 WebSocket 및 JavaScript의 적용을 소개하고 코드 예제를 제공하며 구현 원칙을 자세히 설명합니다. 1. 웹소켓 기술

JavaScript 및 WebSocket을 사용하여 실시간 온라인 주문 시스템을 구현하는 방법 소개: 인터넷의 대중화와 기술의 발전으로 점점 더 많은 레스토랑에서 온라인 주문 서비스를 제공하기 시작했습니다. 실시간 온라인 주문 시스템을 구현하기 위해 JavaScript 및 WebSocket 기술을 사용할 수 있습니다. WebSocket은 TCP 프로토콜을 기반으로 하는 전이중 통신 프로토콜로 클라이언트와 서버 간의 실시간 양방향 통신을 실현할 수 있습니다. 실시간 온라인 주문 시스템에서는 사용자가 요리를 선택하고 주문을 하면

WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법 오늘날의 디지털 시대에는 점점 더 많은 기업과 서비스에서 온라인 예약 기능을 제공해야 합니다. 효율적인 실시간 온라인 예약 시스템을 구현하는 것이 중요합니다. 이 기사에서는 WebSocket과 JavaScript를 사용하여 온라인 예약 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. WebSocket이란 무엇입니까? WebSocket은 단일 TCP 연결의 전이중 방식입니다.

JavaScript 및 WebSocket: 효율적인 실시간 일기 예보 시스템 구축 소개: 오늘날 일기 예보의 정확성은 일상 생활과 의사 결정에 매우 중요합니다. 기술이 발전함에 따라 우리는 날씨 데이터를 실시간으로 획득함으로써 보다 정확하고 신뢰할 수 있는 일기예보를 제공할 수 있습니다. 이 기사에서는 JavaScript 및 WebSocket 기술을 사용하여 효율적인 실시간 일기 예보 시스템을 구축하는 방법을 알아봅니다. 이 문서에서는 특정 코드 예제를 통해 구현 프로세스를 보여줍니다. 우리

JavaScript 튜토리얼: HTTP 상태 코드를 얻는 방법, 특정 코드 예제가 필요합니다. 서문: 웹 개발에서는 서버와의 데이터 상호 작용이 종종 포함됩니다. 서버와 통신할 때 반환된 HTTP 상태 코드를 가져와서 작업의 성공 여부를 확인하고 다양한 상태 코드에 따라 해당 처리를 수행해야 하는 경우가 많습니다. 이 기사에서는 JavaScript를 사용하여 HTTP 상태 코드를 얻는 방법과 몇 가지 실용적인 코드 예제를 제공합니다. XMLHttpRequest 사용

사용법: JavaScript에서 insertBefore() 메서드는 DOM 트리에 새 노드를 삽입하는 데 사용됩니다. 이 방법에는 삽입할 새 노드와 참조 노드(즉, 새 노드가 삽입될 노드)라는 두 가지 매개 변수가 필요합니다.

JavaScript는 웹 개발에 널리 사용되는 프로그래밍 언어인 반면 WebSocket은 실시간 통신에 사용되는 네트워크 프로토콜입니다. 두 가지의 강력한 기능을 결합하면 효율적인 실시간 영상 처리 시스템을 만들 수 있습니다. 이 기사에서는 JavaScript와 WebSocket을 사용하여 이 시스템을 구현하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 첫째, 실시간 영상처리 시스템의 요구사항과 목표를 명확히 할 필요가 있다. 실시간 이미지 데이터를 수집할 수 있는 카메라 장치가 있다고 가정해 보겠습니다.
