기본 바인딩
전역함수 내에서 this 호출시 this = window
1 2 3 4 5 6 7
| function getFruitName() { console.log(this.name); }
var name = 'apple';
getFruitName();
|
암시적 바인딩
객체 function 함수 할당시
객체 내에 function 함수를 호출시 this = 해당 객체
1 2 3 4 5 6 7 8 9 10
| function getFruitName() { console.log(this.name); }
const obj = { name: 'apple', onPress: getFruitName }
obj.onPress();
|
객체 arrow function 함수 할당시
객체 내 arrow function 함수 호출시 this = 해당 컨텍스트의 부모 객체
arrow function은 의도적으로 컨텍스트를 할당할 수 있기 때문에 명시적 할당에 더 가깝다고 볼 수도 있다.
1 2 3 4 5 6
| var name = 'banana' const z = { name: 'apple', onPress: () => console.log(this.name) } z.onPress();
|
객체에 할당된 function 함수를 복사시
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| function getFruitName() { console.log(this.name); }
var name = 'banana'
const obj = { name: 'apple', getFruitName: getFruitName }
const getCopyFruitName = obj.getFruitName
getCopyFruitName()
|
getCopyFruitName은 일반 함수이므로 obj.getFruitName을 할당하는 순간, this는 전역 객체가 되어버린다.
명시적 바인딩
우리가 의도한대로, this를 바인딩해보자!
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| function getFruitName() { console.log(this.name); }
var name = 'banana'
var obje = { name: 'apple', onPress: getFruitName }
const getCopyFruitName = obje.onPress const getCorectCopyFruitName = obje.onPress.bind(obje)
getCopyFruitName() getCorrectCopyFruitName()
|
Reference
http://enarastudent.tistory.com/entry/null과-undefined의-차이
https://stackoverflow.com/questions/1068834/object-comparison-in-javascript
Comment and share