apply 및call

3481 단어

apply

  • apply: 방법은 다른 대상을 납치할 수 있는 방법으로 다른 대상의 속성을 계승한다
  • Function.apply(obj,args) 
    obj: Function this 
    args: , Function(args-->arguments)
    

    call

  • call:apply의 뜻과 같이 매개 변수 목록이 다를 뿐입니다
  •  Function.call(obj,[param1[,param2[,…[,paramN]]]])
    obj: Function this 
    params: 
    
  • apply 예시
  • 
         /* */
         function Person(name,age)
         {
             this.name=name;
             this.age=age;
         }
         /* */
         functionStudent(name,age,grade)
         {
             Person.apply(this,arguments);
             this.grade=grade;
         }
         // 
         var student=new Student("qian",21," ");
         // 
         alert("name:"+student.name+"
    "+"age:"+student.age+"
    "+"grade:"+student.grade); // name:qian age:21 grade: // name age , , apply .
  • 분석: Person.apply(this,arguments); this:창설 대상이 이때 대표되는 것은studentarguments:하나의 수조, 즉 ["qian", "21", "1학년"]이다.즉, 통속적으로 말하자면 학생으로 Person 클래스의 내용을 집행하고 Person 클래스에this가 존재한다.name 등 문장은 학생 대상에 속성을 만듭니다
  • 콜 예시

  • Studen 함수에서 apply를 다음과 같이 수정할 수 있습니다.
    Person.call(this,name,age); 3. 어떤 상황에서는 apply, 어떤 상황에서는call
    대상의 매개 변수를 주는 상황에서 매개 변수의 형식이 그룹일 때, 예를 들어 apply 예시에서 매개 변수arguments가 전달되었다. 이 매개 변수는 그룹 형식이고 Person을 호출할 때 매개 변수의 목록이 일치하는 (즉 Person과 Student의 매개 변수 목록 앞의 두 자리가 일치하는 것) apply를 사용할 수 있다. 만약에 나의 Person의 매개 변수 목록이 이렇다면(age,name), Student의 매개 변수 목록은 (name,age,grade)이다.이렇게 하면 콜로 실현할 수 있다. 즉, 매개 변수 목록에 대응하는 값의 위치를 직접 지정하는 것이다. (Person.call (this,age,name,grade).
    4.apply의 다른 교묘한 사용법
    세심한 사람들은 내가 apply 방법을 호출할 때 첫 번째 매개 변수는 대상(this)이고 두 번째 매개 변수는 하나의 수조 집합이다. Person을 호출할 때 그가 필요로 하는 것은 하나의 수조가 아니다. 그러나 왜 그가 나에게 하나의 수조를 주었는지 나는 여전히 수조를 하나의 매개 변수로 해석할 수 있다. 이것이 바로 apply의 교묘한 용도이다.하나의 수조를 기본적으로 매개 변수 목록으로 변환할 수 있습니다 ([param1,param2,param3]를 param1,param2,param3). 이것은 우리가 프로그램으로 수조의 모든 항목을 매개 변수 목록으로 바꾸는 것을 실현하려면 시간이 좀 걸릴 수 있습니다. apply의 이 점 특성을 빌려 다음과 같은 효율적인 방법이 있습니다. a) Math.max는 그룹 중 가장 큰 항목을 얻을 수 있습니다
    Math 때문에.max 매개변수에서는 Math가 지원되지 않습니다.max([param1, param2]) 즉 수조
    하지만 그것은 Math를 지지한다.max(param1,param2,param3...), 그래서 아까 apply의 그 특징에 따라 varmax=Math를 해결할 수 있습니다.max.apply(null,array), 이렇게 하면 쉽게 하나의 그룹 중 가장 큰 하나를 얻을 수 있습니다 (apply는 하나의 그룹을 하나의 매개 변수로 바꾸어 하나의 매개 변수로 전달하는 방법입니다)
    이것은 호출할 때 첫 번째 매개 변수가null을 주었다. 이것은 이 방법을 호출할 대상이 없기 때문이다. 나는 이 방법으로 나를 도와 연산을 하고 되돌아오는 결과를 얻으면 된다.그래서 그냥 넘버를 하나 보냈어요.
    b) Math.min은 그룹 중 가장 작은 항목을 얻을 수 있습니다
    마찬가지로 max와 같은 생각입니다.min.apply(null,array);
    c) Array.prototype.push는 두 개의 그룹을 합칠 수 있다
    같은push 방법은push를 하나의 수조로 제공하지 않았지만,push(param1,param,...paramN)를 제공하기 때문에apply를 통해 이 수조를 바꿀 수 있습니다. 즉:
      vararr1=new Array("1","2","3");
    
      vararr2=new Array("4","5","6");
    
      Array.prototype.push.apply(arr1,arr2);
    

    이렇게 이해할 수 있다.arr1은push 방법을 호출했다. 매개 변수는 apply를 통해 수조를 매개 변수 목록으로 바꾸는 집합이다.
    보통 어떤 상황에서 apply를 사용하여 Math와 유사하게 사용할 수 있습니다.min 등의 특수 용도:
     n , ([param1[,param2[,…[,paramN]]]]), apply !
    

    5. 요약:
    처음에 나는 apply에 대해 매우 몰랐다. 마지막에 몇 번을 더 봤고 코드를 몇 번 더 두드려서야 중간의 이치를 깨달았다. 그래서 무슨 일을 하든지 머리를 써서 코드를 두드리면 이런 기술을 습득할 수 있다.
    그리고 예를 들어 네 번째 부분의 내용을 보면 실제로 존재하는 문제를 교묘하게 해결했다. 이것은 초보자가 생각할 수 있는 해결 방안이 아닐 것이다. (이것도 내가 생각한 것이 아니다.) 프로그래밍에 대해 일정한 인식을 가지지 않으면 이런 생각을 하지 못할 것이다. 아니면 한마디로 많이 쌓고 많이 공부하며 자신의 능력과 프로그래밍 사상에 대한 이해 능력을 향상시키는 것이 가장 관건이다!

    좋은 웹페이지 즐겨찾기