나는 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
필드의 값을 참조한다.
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
그래서 기본적으로 완전히 다른 두 언어가 왜 다르게 동작하는지 묻습니다. "javascript"의 "java"는 Java 프로그래밍 언어와 아무런 관련이 없습니다. – luk2302
@ luk2302 - 언어가 기본적으로 관계가 없다고 말하면 사실입니다. 그러나 '자바 스크립트'의 '자바'가 자바 프로그래밍 언어와 아무런 관련이 없다고 말하면 빠른 Google 검색을 통해 검증 할 수 있습니다. 위키 피 디아에서 : "... ** Sun의 상표 라이센스를 받으면 자바 스크립트라는 이름이 채택되었습니다. ** 당시 자바 마케팅이 다소 인기가있었습니다 **" –
Not 다른 언어를 비교하는 것뿐 아니라 다른 개념을 비교하고 있습니까? _ "생성자에서이 필요성을 이해합니다."- 생성자 함수가 다르게 처리되어야하는 이유는 무엇입니까? – zeroflagL