: this는 실행컨텍스트가 생성될 때 결정 (this binding) === this는 함수를 호출할 때 결정된다.
: 메서드의 내부라고 해도, 함수로서 호출한다면 this는 전역객체
: 함수를 실행하는 당시의 주변환경보다 해당함수를 호출하는 구문앞에 점 또는 대괄호 표기가 있는지가 관건이다!
생성자 : 구체적인 인스턴스를 만들기 위한 일종의 틀 ( constructor ⇒ 구성하는 것 )
call 메서드
apply 메서드
//Math.max(2,3,7) ⇒ 7을 반환( 배열이 아닌 인자들을 , 로 구분)
var numbers = [ 10,20, 3, 15, 58 ];
//Math.max는 배열에적용 못하니까 apply 사용
//this는 없으니까 null로 적용
var max = Math.max.apply(null, numbers;)
var min = Math.min.apply(null, numbers;)
console.log(max,min) // 58 , 3
call/apply 메서드 활용
slice() 함수
1. 배열로부터 특정범위를 복사한 값들을 담고있는 새로운 배열을 만드는데 사용. 첫번째 인자는 시작인덱스, 두번째 인자는 종료인덱스를 받으며, 시작부터 종료 인덱스까지 값을 복사하여 반환
2. ()안쓰면 전체 복사!!!
forEach
배열.forEach(funtion(arg) {
console.log(arg)
}, this) // ⇒ this는 생략가능
bind 메서드
: call과 비슷하지만 즉시호출하진 않고 넘겨받은 this 및 인수들을 바탕으로 새로운 함수를 반환하는 메서드
var func = function (a,b,c,d){
console.log(this,a,b,c,d);
};
func(1,2,3,4); // 함수니까 window객체
var bindFunc1 = func.bind({x:1});
//.bind메서드를 이용하면은 매개변수 자리에 this 바인딩으로 사용할 객체를 넣을 수 있다.
//그래서 this에 {x:1}이라는 값을 넘겨준 것. =>새로운 함수를 반환하여 bindFunc1에 할당을 한다.
bindFunc1(5,6,7,8); //{x:1} 5 6 7 8
//위에있는 func가 실행 => this는 {x:1}이니까 뒤에 5678이 반환됨
var bindFunc2 = func.bind({x:1},4,5);
bindFunc2(6,7); //{x:1} 4 5 6 7
bindFunc2(8,9); //{x:1} 4 5 8 9
// 위와같이 부분적으로 변경할 수 있다.
console.log(func.name); // func
console.log(bindFunc.name); //bound func
name 프로퍼티
const box = {size: "big", color: "red"};
const newBox = { ...box};
// {size: "big", color: "red"}
const newBlueBox = {...box, color: "blue" };
// {size: "big", color: "blue"}
… 을 붙임으로써 newbox에 원래 box안에 가지고 있던 값들이 그대로 복사되어 오는 것을 알 수 있다.
내용을 바꾸고 싶다면(위의 예시에서는 사이즈 혹은 색깔) 뒤에 내용을 추가해주면 바뀌는 것을 확인할 수 있다.
: 배열 내의 모든 요소 각각에 대하여 주어진 함수를 호출한 결과를 모아 새로운 배열 반환하기
const array1= [1,4,9,16];
//map 사용
const map1 = array1.map(x=>x*2);
//함수가 적용된 결과로 새로운 배열을 반환합니다.
console.log(map1); //[2, 8, 18, 32]
: 주어진 함수의 조건을 통과한 모든 요소를 모아 새로운 배열로 반환하기
const fruits= ['사과', '귤', '배', '감', '바나나', '키위'];
//filter 사용
const result = fruits.filter(fruit => fruit.length > 2);
//함수가 적용된 결과로 새로운 배열을 반환합니다.
console.log(result); //['바나나']
function solution(num, k) {
let num_arr = String(num)
for (let i = 0; i <= num_arr.length; i++){
if(Number(num_arr[i]) === k){
return i + 1
} else{
return -1
}
}
}
if 조건만 넣었을 때는 원하는 결과가 도출이 되더니 else문 넣자마자 모든 값이 -1이 되는 문제가 발생했다...
⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩⇩
function solution(num, k) {
let num_arr = String(num)
for (let i = 0; i <= num_arr.length; i++){
if(Number(num_arr[i]) === k){
answer = i + 1;
break;
} else{
answer = -1 ;
}
}
return answer
그래서 if에서 조건을 만족했을 때, answer값을 저장하고 for문을 break하도록 하고, answer값에 인덱스를 저장해서 마지막에 answer를 return하도록 만들었더니 해결되었다.
function solution(num, k) {
const num_arr = num.toString();
const index = num_arr.indexOf(k.toString());
if(index !== -1){
return index + 1;
}else{
return index;
}
}
하지만 다른 분들이 푸셨던 대로 indexOf()를 이용해 풀었을때가 코드도 짧아지고 깔끔해졌다. 내장 매서드를 잘 몰라서 처음엔 사용하지 않고 풀었지만, 이번 기회에 메서드를 공부해서 많이 활용해 볼 필요성을 느꼈다.
: indexOf() 메서드는 호출한 String 객체에서 주어진 값과 일치하는 첫 번째 인덱스를 반환합니다. 일치하는 값이 없으면 -1을 반환한다.
const index = num_arr.indexOf(k.toString());
ex) 상수 index는 num_arr(string객체)에서 k.toString()(k를 문자열로 변환한 값)과
일치하는 첫번째 인덱스를 반환한다. 일치하는 게 없을 시, -1을 반환.
: 둘다 문자열로 변환해 주는 역할을 한다.
이 둘의 차이점은
String => 함수
toString() => 메서드 이다.
그래서 사용할 때도
const num_arr = String(num)// String은 괄호안에 매개변수를 넣어주고
const num_arr = num.toString();// toString은 바꿀 변수 뒤에 .을 붙여준다.
오늘도 시간이 너무 훅 지나갔다. 공부하는 시간도 순삭이고, 쉬는 시간도 순삭이다. 목표한 할당량을 채우는 것도, 뒤돌면 아직 공부할게 산더미처럼 쌓여있어서 막막한 기분도 들지만 조급해말고 차근차근 해나가야겠다. 오늘은 팀원들과 프로그래머스를 통해 자바스크립트를 사용해보는 시간을 가졌다. 생각해보니 메서드에 대해서 익힌적이 없어서 메서드공부가 필요함을 느꼈던 감사한 시간이었다. 도장깨기 잘 해나가서 언젠간 자바스크립트를 잘 다룰 수 있는 날이 올거라고 믿는다 🙂 오늘도 긍정회로돌리기 ! ⭐️
꾸준히 지금처럼만이라면 ㅎㅎ자바스크립트 전문가 되실거라 확신합니다~