arguments
나머지 매개변수
function User(name, age, ...skills) {
this.name = name;
this.age = age;
this.skills = skills;
const user1 = new User("Mike", 30, "html", "css")
const user2 = new User("Tom", 25, "javascript", "react")
const user3 = new User("Jane", 20, "English", "Korean")
console.log(user1) // {name: "Mike", age: 30, skills = ["html", "css"]
console.log(user2) // {name: "Tom", age: 25, skills = ["javascript", "react"]
console.log(user3) // // {name: "Jane", age: 20, skills = ["English", "Korean"]
forEach
문을 사용한 것과 스프레드 연산자를 사용한 것의 값은 같다. > 전개구문이 훨씬 효율적이다.let user = { name: "Mike" };
let info = { age: 30 };
let fe = ["JS", "React"]
let lang = ["Korean", "English"]
user = {
...user,
...info,
skills : [ ...fe, ...lang, ]
console.log(user); // { name: "Mike", age: 30, skills: ["JS", "React", "Korean", "English"]
클로저
call, apply, bind
call
const mike = { name: "mike", };
function showThisName() {
console.log(this.name);
}
showThisName(); // this가 window를 가르키고, window의 name은 ""이기 때문에 ""이 출력된다.
function update(birthYear, occupation) {
this.birthYear = birthYear;
this.occupation = occupation;
}
update.call(mike, 1999, "singer")
console.log(mike); // { name: "Mike", birthYear: 1999, occupation: "singer" }
const mike = { name: "mike", };
function update(birthYear, occupation) {
this.birthYear = birthYear;
this.occupation = occupation;
}
update.apply(mike, [1999, "singer"])
console.log(mike); // { name: "Mike", birthYear: 1999, occupation: "singer" }
const nums = [3, 10, 1, 6, 4]
// spread
const minNum = Math.min(...nums) // 1
const maxNum = Math.max(...nums) // 10
const minNumber = Math.min.apply(null, nums); // 1
// = Math.min.apply(null, [3, 10, 1, 6, 4])
const maxNumber = Math.max.call(null, ...nums) // 10
const mike = { name: "mike", };
function update(birthYear, occupation) {
this.birthYear = birthYear;
this.occupation = occupation;
}
const updateMike = update.bind(mike);
updateMike(1999, "singer");
console.log(mike); // { name: "Mike", birthYear: 1999, occupation: "singer" }
const car = {
wheels: 4,
drive() {
console.log("drive..");
},
};
const bmw = {
color: "red",
navigation: 1,
};
bmw.__proto__ = car;
const x5 = {
color: "white",
name: "x5",
};
x5.__proto__ = bmw;
⭐️ 두 코드는 같은 코드이다.
class Car {
constructor(color) {
this.color = color;
this.wheels = 4;
}
dirve() {
console.log("drive..");
}
stop() {
console.log("STOP!");
}
class Bmw extends Car {
// 생략된 부분이지만 생략을 안해줘도 된다. 대신 알맞은 인자를 전달해줘야 한다.
// consttructor(...args) {
// super(...args);
// )
park() {
console.log("PARK");
}
stop() {
super.stop(); // 덮어 쓰지 않고 Car의 stop를 사용하기 (오버라이딩)
console.log("OFF");
}
}
const z4 = new Bmw("blue")
⭐️ 결과