'use strict'// Strict 모드를 사용하겠다고 선언했습니다.functionfunc(){console.log(this); // undefined}func();
메소드 호출 패턴
호출된 함수가 객체의 프로퍼티이면 메소드 호출 패턴으로 호출됩니다.
메소드 내부의 this는 해당 메소드를 소유한 객체 즉 해당 메소드를 호출한 객체에 바인딩됩니다.
var person = { name :'olaf',getName:function(){console.log(this); // personconsole.log(this.name); // olaf }};person.getName();
메서드안에 또다른 inner 함수가 존재한다면 그때의 this는 무엇일까요?
var person = { name :'olaf',getName:function(){console.log(this);console.log(this.name); functioninner(){console.log(this); // window }inner(); // 메서드 내부함수 실행 }};person.getName();
함수 호출패턴과 마찬가지로 this는 전역객체인 window를 가리킵니다.
생성자 호출 패턴
varPerson=function(name){this.name = name; // this는 자신 즉, Person을 가리킨다. };Person.prototype.getName=function(){console.log(this.name); // Person.prototype 이기때문에 프로토타입 내에서도 this는 자기자신 Person을 가리킵니다.};
프로토타입 안에서의 inner 함수 호출의 this도 일반 함수 호출 패턴을 따릅니다.
varPerson=function(name){this.name = name; // this는 자신 즉, Person을 가리킨다. };Person.prototype.getName=function(){console.log(this.name); // Person.prototype 이기때문에 프로토타입 내에서도 this는 자기자신 Person을 가리킵니다.functioninner(){console.log(this); // window가 찍힙니다! 이제 눈에 보이시죠?! }inner();};var p =newPerson('olaf');p.getName();