[FE - ConnecTo] DAY29 TILπŸ‘©πŸ»β€πŸ’»

JUNYΒ·2022λ…„ 8μ›” 19일
0

πŸ“šZeroBase ConnecTo Front-End

λͺ©λ‘ 보기
18/53
post-thumbnail

22.08.19 μˆ˜μ—…μ„ 톡해 κ³΅λΆ€ν•œ λ‚΄μš©λ“€μ„ μ •λ¦¬ν•˜μ˜€μŠ΅λ‹ˆλ‹€ 😊
ν”Όλ“œλ°±μ€ μ–Έμ œλ‚˜ ν™˜μ˜μž…λ‹ˆλ‹€! 🍊

this?

μ‹λ³„μž 없이 ν”„λ‘œνΌν‹° ν‚€λ‘œλ§Œ 값을 κ°€μ Έμ˜¬ μˆ˜λŠ” μ—†λ‹€.

const circle = {
	radius: 5,
	getDiameter() {
		return 2 * circle.radius;
	}
}

console.log(circle.getDiameter());

κ·Έλž˜μ„œ circle.radius 라고 μ“°λŠ” 것.

getDiameter ν•¨μˆ˜κ°€ circle에 fixλ˜μ–΄ 있기 λ•Œλ¬Έμ—, κ·Έλƒ₯ μ’…μ†λ˜λŠ” κ²ƒμž„

ν”„λ‘œνΌν‹°μ˜ κ°’ : μžλ°” μŠ€ν¬λ¦½νŠΈμ—μ„œ κ°’μœΌλ‘œ μΈμ •λ˜λŠ” λͺ¨λ“  값을 의미

ν•¨μˆ˜κ°€ 객체에 λ¬Άμ—¬μžˆμ§€ μ•Šλ‹€κ³  μƒκ°ν•˜κΈ° μœ„ν•΄μ„œ, thisλ₯Ό μ¨μ•Όν•˜λŠ” κ²ƒμž„

μžλ°”μŠ€ν¬λ¦½νŠΈμ—μ„œ thisλŠ” λ™μ μœΌλ‘œ 값을 생성함.


ν•¨μˆ˜ 및 μŠ€μ½”ν”„

λ ‰μ‹œμ»¬ μŠ€μ½”ν”„

β†’ μƒμœ„ μŠ€μ½”ν”„λ₯Ό κ²°μ •ν•˜λŠ” 방법. ν˜ΈμΆœμ„ μ–΄λ””μ„œ ν–ˆλŠλƒκ°€ μ€‘μš”ν•œ 것이 μ•„λ‹ˆκ³ , μ–΄λ””μ„œ μ •ν–ˆλŠλƒκ°€ μ€‘μš”ν•œ κ²ƒμž„

const foo = function() {
	console.dir(this);
}

// 무슨 ν•¨μˆ˜λƒ? -> κ·Έλƒ₯ ν•¨μˆ˜. μ •μ˜ν•˜λŠ” 것은 μ–΄λΆˆμ„±μ„€μž„.
// ES6λΆ€ν„°λŠ” ν•¨μˆ˜λ₯Ό κ΅¬λ³„ν•˜κΈ° μ‹œμž‘ν•¨!

μ–΄λ–€ ν•¨μˆ˜λ‘œ ν˜ΈμΆœλ˜μ—ˆλŠ”μ§€λŠ” 아직 λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ— κ·Έλƒ₯ ν•¨μˆ˜μΈ 것.

ν™”μ‚΄ν‘œ ν•¨μˆ˜? non-constructor

μ½”λ“œλ₯Ό μ‚¬μš©ν•˜λ©΄μ„œ, 함정에 빠지지 μ•ŠμœΌλ €λ©΄ μ“°λ“  μ•ˆμ“°λ“  μ•Œμ•„μ•Όλ¨!!!


ꡳ이 μ€‘μ²©ν•¨μˆ˜λŠ” μ™œ λ§Œλ“€κΉŒ???

foo() {
	function bar() {
		console.log("bar's this: ", this);
	}
}

μ—¬λŸ¬ 번 ν˜ΈμΆœν•˜κΈ° μœ„ν•΄, 그리고 foo ν•¨μˆ˜ λ‚΄μ—μ„œλ§Œ μ“°λ €κ³ !


this의 뢈일치 문제λ₯Ό μΌμΉ˜μ‹œν‚¬ 수 μžˆλŠ” 방법?

  • thisλ₯Ό μΌμΉ˜ν•˜λ„λ‘ that으둜 λŒ€ν”Όμ‹œν‚¨λ‹€
  • bindλ₯Ό μ‚¬μš©ν•œλ‹€
  • ν™”μ‚΄ν‘œ ν•¨μˆ˜λ₯Ό μ‚¬μš©ν•΄μ„œ μΌμΉ˜μ‹œν‚¨λ‹€!

ν•¨μˆ˜λ₯Ό λ³Έλ‹€λŠ” μ˜λ―Έκ°€ 무엇인가?

μŠ€μ½”ν”„μ— μ˜¬λ¦¬λƒ μ•ˆμ˜¬λ¦¬λŠλƒμ˜ 차이


ν•¨μˆ˜ 객체

ν•¨μˆ˜ κ°μ²΄λŠ” ν˜ΈμΆœν•  수 μžˆλŠ” 객체일 뿐, 호좜 ν•  λ•Œ λ‚΄λΆ€ ν”„λ‘œμ„ΈμŠ€λŠ” 아무 관계가 μ—†μŒ

ν•¨μˆ˜ 객체λ₯Ό λ§Œλ“œλŠ” 것은 ν•¨μˆ˜ μ •μ˜μ˜ ν‰κ°€μž„


ν•¨μˆ˜ ν˜ΈμΆœμ΄λž€?

ν•¨μˆ˜ 객체 μ•ˆμ— μžˆλŠ” λ‚΄λΆ€ λ©”μ†Œλ“œμ˜ μ½œμ„ ν˜ΈμΆœν•˜λŠ” 것 β†’ κ·Έ λ•Œ ν•¨μˆ˜ μ½”λ“œ λ‚΄λΆ€λ₯Ό κ·Έ λ•Œκ°€μ„œ ν‰κ°€ν•˜λŠ” κ²ƒμž„

ν•¨μˆ˜ 객체가 μƒμ„±λœλ‹€! β†’ ν•¨μˆ˜ λ‚΄λΆ€μ˜ λ¬Έμžμ—΄λ„ κ°–κ³  μžˆλ‹€.

const f = function (){};
// ν•¨μˆ˜ 객체만 λ§Œλ“€μ–΄μ§
function add (a, b) { 
	return a + b; // 이 문이 μ‹€ν–‰λ˜μ—ˆμ„ λ•Œ, a + bλ₯Ό 함
} // 이 문이 μ‹€ν–‰λ˜μ—ˆμ„ λ•Œ ν•¨μˆ˜ 객체가 λ§Œλ“€μ–΄μ§€λŠ” 게

// λ¬Έ : μ‹€ν–‰μ˜ μ΅œμ†Œ λ‹¨μœ„

ν•¨μˆ˜ 호좜과 μ •μ˜μ˜ 평가λ₯Ό κ΅¬λΆ„ν•΄μ„œ 생각해야 ν•˜λŠ”λ°,

평가단계에 λ“€μ–΄κ°„λ‹€λŠ” 것은 μŠ€μ½”ν”„λ₯Ό λ§Œλ“ λ‹€λŠ” κ²ƒμž„!


call vs apply

Math.max(1, 2, 3)μ—μ„œ ,λŠ” μ—°μ‚°μžμž…λ‹ˆκΉŒ? 놉!

const arr = [1, 2, 3];
// undefined;
Math.max.apply(null, arr);
// null? 

call method의 λ³Έμ§ˆμ€ λ­”κ°€μš”? ν•¨μˆ˜λŠ” 원칙상 ν•˜λ‚˜μ˜ 일만 해야함!

  1. . μ•žμ˜ 것을 ν˜ΈμΆœν•˜λŠ” 것이 본질

  2. thisλ₯Ό κ°ˆμ•„λΌμš°λŠ” 것이 본질

근데 μ™œ null인가? 이 친ꡬλ₯Ό μ•ˆμ“΄λ‹€λŠ” 것을 λ‹΄κΈ° μœ„ν•΄μ„œ!

call으둜 λ°”κΎΈλ©΄ 배열이 λ“€μ–΄κ°€λŠ” κ±°λž‘ λ˜‘κ°™μŒ. ν’€μ–΄μ€˜μ•Ό 함!

Math.max.call(null, ...arr);

μš”μ¦˜μ€

Math.max(…arr);

ν•˜λ©΄ 됨!

const arr = [1, 2, 3]; 얕은 볡사 ν•˜κ³  μ‹Άμ–΄!
[… arr] ν•˜λ©΄ 됨!

slice

식빡을 자λ₯Έλ‹€λŠ” κ°œλ…μœΌλ‘œ μ—¬κΈ°μ„œλΆ€ν„° μ—¬κΈ°κΉŒμ§€ 자λ₯΄κ² λ‹€λŠ” 것과 λΉ„μŠ·ν•¨

κ²°κ΅­ 볡사와 λΉ„μŠ·ν•œ κ°œλ…μž„!

arr.slice() === arr

arr.slice()[0] === arr[0]
// μ›μ‹œκ°’μ€ κ°™λ‹€. 객체가 λ‹€λ₯Έ κ²ƒμž„!

μœ μ‚¬λ°°μ—΄ 객체λ₯Ό λ°°μ—΄λ‘œ λ§Œλ“ λ‹€?

const arrayLike = {0: 1, 1: 2, length: 2};
Array.prototype.slice.call(arrayLike);

배열은 μ§„μ§œ 배열이 μ•„λ‹ˆλ‹€ β†’ λ‚˜μ€‘μ— λ°°μ—΄ νŒŒνŠΈμ—μ„œ λ‹€μ‹œ 이야기!

[…arrayLike]μ΄λ ‡κ²Œ μ“°λ©΄ μ•ˆλ˜λŠ”λ°, μ™œλƒ? μš” μ•ˆμ— 값이 μ΄ν„°λŸ¬λΈ”μ΄ μ™€μ•Όν•˜κΈ° λ•Œλ¬Έμž„

κ·Έλž˜μ„œ Array.from(arrayLike) μ΄λ ‡κ²Œ 써야함.


μ‹€ν–‰ μ»¨ν…μŠ€νŠΈ

νƒ€μž…μ€ 값이 가지고 μžˆλ‹€.

일단 μ „μ—­μ½”λ“œ ν•¨μˆ˜μ½”λ“œλ₯Ό μ‹ κ²½μ“°λ©΄ λœλ‹€

var a = 1; // β†’ ν”„λ‘œνΌν‹°μ•Ό μ „μ—­λ³€μˆ˜μ•Ό..?
window.a // β†’ κ°€λŠ₯함.

ES5 μ—μ„œλŠ” μ „μ—­ 객체가 μ „μ—­ μŠ€μ½”ν”„ 역할을 ν–ˆμŒ

μ „μ—­ μŠ€μ½”ν”„ 역할을 ν•˜λŠ” μŠ€νŽ˜μ΄μŠ€κ°€ 2κ°œκ°€ 있음

  • μ „μ—­ μ½”λ“œ : μ „μ—­ 객체와도 연결이 λ˜μ–΄μ•Ό 함
  • ν•¨μˆ˜ μ½”λ“œ : 지역 μŠ€μ½”ν”„, arguments, λ§€κ°œλ³€μˆ˜λ„ 가지고 μžˆμ–΄μ•Ό 함
var a = 1;
var a // μ „μ—­ μ½”λ“œμ˜ 평가 λ‹¨κ³„μ—μ„œ (λŸ°νƒ€μž„ μ΄μ „μ—μ„œ~)
a = 1; // μ „μ—­ μ½”λ“œμ˜ μ‹€ν–‰ λ‹¨κ³„μ—μ„œ
profile
μ„±μž₯ν•˜λŠ” 개발자🌼

0개의 λŒ“κΈ€