나는 며칠 전에 인터뷰에서 이것을 사용했습니다. 면접관은 나의 이해가 약간 편견이라고 말했다. 나는 책과 블로그를 읽으 러 가서 몇 가지 테스트를했습니다. 나는 내 이해가 실제로 잘못되었다는 것을 알았다.
1. 글로벌 변수
가장 일반적으로 사용되는 것이어야합니다. 기능에서 이것을 호출하십시오. 이것은 실제로 글로벌 변수입니다.
var value = "0"; 함수 mei () {var value = "1"; Console.log (this.value); // 0 console.log (값); // 1} mei ();이것은 글로벌을 가리키기 때문에 출력은 0입니다.
2. 생성자
이것은 내가 더 익숙한 사용법입니다. 이것을 생성자에 사용하십시오. 새로운 새로운 객체를 마친 후에는이 새로운 객체를 가리 킵니다.
var value = "창"; 함수 mei () {this.value = 1; this.show = function () {console.log (this.value)}} var m = new Mei (); Console.log (M.Value); // 1 M.Show (); // 1출력이 창 대신 1임을 알 수 있습니다. 생성자로 인해 여기에서 글로벌 변수 대신 새로운 객체를 가리 켰음을 알 수 있습니다.
3. 말하고 적용하십시오
내 전화에서 예제를 빌리고 직접 블로그를 적용하십시오.
var p = "456"; 함수 f1 () {this.p = "123"; } 함수 f2 () {console.log (this.p); } f2 (); // 456 f2.call (f1 ()); // 123 f2.apply (f1 ()); // 123첫 번째 줄의 출력은 이해하기 쉽습니다. 이것은 전 세계를 가리 킵니다. 123은 전화 또는 신청을 사용한 후 F2로 F1을, F1의 P는 123이기 때문입니다. 자세한 내용은 블로그 게시물을 클릭하십시오.
4.이 함수는 객체의 메소드라고합니다 (오류가 발생한 곳)
그 당시 나는 몇 가지 방법으로 객체를 써달라고 요청했습니다. 나는 내 마음에 글로벌 변수를 정의한 다음 객체의 방법에서 이것을 불렀습니다. 면접관은 이것이 무엇인지 물었습니다. 나는이 방법을 거의 사용하지 않았기 때문에 창이어야한다고 말했고, 새로운 또는 전화만이 이것의 방향을 바꿀 것이라고 생각했기 때문에 그는 그것이 잘못되었다고 말했고 나에게 돌아가서 직접 보라고 요청했다. 이제 시도해 보았습니다. 정말 틀 렸습니다. 코드를 게시하십시오
var value = "아버지"; 함수 mei () {} mei.value = "child"; mei.get = function () {console.log (this.value)}; mei.show = function () {console.log (value)}; mei.get (); // child mei.show (); //아버지get은 Mei의 방법이라고 불리우므로 여기에 Mei를 가리 킵니다.
아버지는 이런 식으로 이해합니다. 쇼가 가리키는 기능은 지구 환경에서 정의됩니다. 스코프 체인으로 인해 쇼에는 값이 없습니다. 그래서 나는 그의 환경을 정의하고 그것을 찾습니다. 이것은 글로벌 가치를 찾습니다. 여기서 이해에 오류가 있으면 친구가 그것을 지적 할 수 있기를 바랍니다!