2017-01-03 3 views
9

나는 ES5에서 화살표 기능 및 클래스와 같이 this 키워드와 함께 존재하는 많은 문제를 ES6에서 해결했습니다.ES6 클래스에서 "this"가 암시 적이 지 않은 이유는 무엇입니까?

내 질문은 ES6 클래스의 컨텍스트에서 this의 사용과 관련이 있으며 명시 적으로 작성해야하는 이유는 무엇입니까? 나는 원래 Java 개발자 였고 다음 코드 줄이 완벽하게 자연 스럽다. 그 방법의 범위에 정의 된 이름 myName와 로컬 변수를 가지고 있지 않는

class Person { 
    private String myName; 

    public Person() { 
    myName = "Heisenberg"; 
    } 

    public void sayMyName() { 
    System.out.println("My name is " + myName); 
    } 
} 

컴파일러는 항상 myName 필드의 값을 참조한다.

그러나 한 번 우리는 ES6이 코드를 변환 :

class Person { 

    constructor() { 
    this.myName = "Heisenberg"; 
    } 

    sayMyName() { 
    console.log(`My name is ${myName}`); 
    } 
} 

이 작동하지 않으며 그것은 Uncaught ReferenceError: myName is not defined 발생합니다. 이 문제를 해결하는 유일한 방법은 명시 적 this 참조 던져하는 것입니다 ES6 수업이 필드 생성자의 외부에서 정의하는 것을 허용하지 않기 때문에

console.log(`My name is ${this.myName}`) 

내가 생성자에서 this의 필요성을 이해하지만 Javascript 엔진이 Java 컴파일러와 동일한 기능을 수행 할 수없는 이유를 이해할 수 없습니다. sayMyName

+1

그래서 기본적으로 완전히 다른 두 언어가 왜 다르게 동작하는지 묻습니다. "javascript"의 "java"는 Java 프로그래밍 언어와 아무런 관련이 없습니다. – luk2302

+2

@ luk2302 - 언어가 기본적으로 관계가 없다고 말하면 사실입니다. 그러나 '자바 스크립트'의 '자바'가 자바 프로그래밍 언어와 아무런 관련이 없다고 말하면 빠른 Google 검색을 통해 검증 할 수 있습니다. 위키 피 디아에서 : "... ** Sun의 상표 라이센스를 받으면 자바 스크립트라는 이름이 채택되었습니다. ** 당시 자바 마케팅이 다소 인기가있었습니다 **" –

+2

Not 다른 언어를 비교하는 것뿐 아니라 다른 개념을 비교하고 있습니까? _ "생성자에서이 필요성을 이해합니다."- 생성자 함수가 다르게 처리되어야하는 이유는 무엇입니까? – zeroflagL

답변

5

아마도 귀하의 질문에 직접 답변하지는 않겠지 만, JS class 키워드에 대해 생각해야 할 방향을 지시합니다.

표지에는 마법에 관한 내용이 없습니다. 기본적으로 자바 스크립트가 시작된 이후 프로토 타입 상속에 대한 통설적인 설탕입니다.

JS의 수업에 대한 자세한 내용을 보려면 herehere을 클릭하십시오.

명시 적으로 this을 써야하는 이유는 JS에서 항상 상황에 맞는 것으로서 정확한 개체를 참조해야하기 때문입니다. more을 읽으십시오.

관련 문제