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对象 }

去掉重复并排序的方法:1、使用“Array.from(new Set(arr))”或者“[…new Set(arr)]”语句,去掉数组中的重复元素,返回去重后的新数组;2、利用sort()对去重数组进行排序,语法“去重数组.sort()”。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于Symbol类型、隐藏属性及全局注册表的相关问题,包括了Symbol类型的描述、Symbol不会隐式转字符串等问题,下面一起来看一下,希望对大家有帮助。

怎么制作文字轮播与图片轮播?大家第一想到的是不是利用js,其实利用纯CSS也能实现文字轮播与图片轮播,下面来看看实现方法,希望对大家有所帮助!

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于对象的构造函数和new操作符,构造函数是所有对象的成员方法中,最早被调用的那个,下面一起来看一下吧,希望对大家有帮助。

方法:1、利用“点击元素对象.unbind("click");”方法,该方法可以移除被选元素的事件处理程序;2、利用“点击元素对象.off("click");”方法,该方法可以移除通过on()方法添加的事件处理程序。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于面向对象的相关问题,包括了属性描述符、数据描述符、存取描述符等等内容,下面一起来看一下,希望对大家有帮助。

foreach不是es6的方法。foreach是es3中一个遍历数组的方法,可以调用数组的每个元素,并将元素传给回调函数进行处理,语法“array.forEach(function(当前元素,索引,数组){...})”;该方法不处理空数组。

本篇文章给大家带来了关于JavaScript的相关知识,其中主要介绍了关于BOM操作的相关问题,包括了window对象的常见事件、JavaScript执行机制等等相关内容,下面一起来看一下,希望对大家有帮助。


핫 AI 도구

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

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

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

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

에디트플러스 중국어 크랙 버전
작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SecList
SecLists는 최고의 보안 테스터의 동반자입니다. 보안 평가 시 자주 사용되는 다양한 유형의 목록을 한 곳에 모아 놓은 것입니다. SecLists는 보안 테스터에게 필요할 수 있는 모든 목록을 편리하게 제공하여 보안 테스트를 더욱 효율적이고 생산적으로 만드는 데 도움이 됩니다. 목록 유형에는 사용자 이름, 비밀번호, URL, 퍼징 페이로드, 민감한 데이터 패턴, 웹 셸 등이 포함됩니다. 테스터는 이 저장소를 새로운 테스트 시스템으로 간단히 가져올 수 있으며 필요한 모든 유형의 목록에 액세스할 수 있습니다.

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

Atom Editor Mac 버전 다운로드
가장 인기 있는 오픈 소스 편집기

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