ES6 객체 메서드가 객체를 선언할 때 화살표 함수 this의 지향 문제

1315 단어 es6

토대

  • this,super,arguments,new가 없습니다.target 바인딩
  • new 키워드를 통해 호출할 수 없음
  • prototype이 없음
  • this의 귀속을 귀속할 수 없음
  • argument
  • 는 지원되지 않습니다.
  • 중복 명명 매개변수가 지원되지 않음
  • 의문

    //     var   value  
    var value = ' '
    
    const foo = {
      value: ' ',
      getValue: () => console.log(this.value)
    }
    
    foo.getValue() // =>  
    
    //     const   value
    const value = ' '
    const foo = {
       value: ' ',
       getValue: () => console.log(this.value)
    }
    
    foo.getValue() // => undefind
    
    

    상기 두 가지 예시에서 첫 번째 출력 샤오밍의 두 번째 출력undefined은 모두 직접 요청한 전역 속성이다. const는 윈도우 속성에 자동으로 걸리지 않기 때문에undefined를 출력한다.

    까닭


    화살표 함수는 성명할 때 결정된다.
    화살표 함수this의 지향(this뿐만 아니라 슈퍼, new.target 등)은 외곽의 가장 가까운 비화살표 함수에 의해 결정된다.
    대상이 성명할 때value와getvalue()는foo의 내부 속성(방법)이므로 그들의 외곽은 자연히 전체 국면이다.
    관건은 getvalue:()=>{}getvalue:function(){}getvalue(){} 이 세 가지 형식의 방법에 대한 성명을 어떻게 대해야 하는가에 있다.
    뒤의 두 가지 성명 방식은 기능적으로 등가이고 세 번째는 es6가 새로 추가한 약자 방식이다.첫 번째 화살표 함수와 둘의 비례는 화살표 함수 자체와this지향 등에 있다.
    삼자가 성명하는 과정에서value 속성과 마찬가지로foo 내부에 속하고foo와 같은 가격에 속한다.
    따라서 화살표 함수로 getvalue 방법을 설명할 때this는foo 외곽에 의해 결정되고foo의 외곽은 window이기 때문에 getvalue의this는 window를 가리킨다.

    좋은 웹페이지 즐겨찾기