const obj = {
x: 1,
// foo 는 메서드이다.
foo() { retun this.x },
}
console.log(obj.foo()); // 1
new obj.foo(); // TypeError non-constructor로 생성자 함수로서 호출할 수 없다.
obj.foo.hasOwnProperty('prototype') // false prototype 프로퍼티가 없고, 프로토타입도 생성하지 않는다.
// 화살표 함수
const mutiply = (x,y) => x+y;
// 함수 선언문으로 정의 불가능, 함수 표현식으로 정의해야 한다.
const sum = (a,b) => {
const result = a + b;
return result;
};
// 여러개의 문인 경우 {} 생략 불가능
class Prefixer{
constructor(prefix) {
this.prefix = prefix;
}
add(arr){
return arr.map(item => this.prefix + item);
}
}
const prefixer = new Prefixer('-webkit-');
console.log(prefixer.add(['transition', 'user-select']));
// ['-webkit-transition', '-webkit-user-select']
class Base {
constructor(name) {
this.name = name ;
}
sayHi() {
return `Hi${this.name}`;
}
}
class Derived extends Base {
// 화살표 함수의 super는 상위 스코프인 constructor의 super를 가리킨다.
sayHi = () => `${super.sayHi()} how are you doing?`;
}
const derived = new Derived('Lee');
console.log(derived.sayHi()); // Hi! Lee how are you doing?
화살표 함수는 함수 자체의 argument 바인딩을 갖지 않는다. 따라서 화살표 함수 내부에서 arguments를 참조하면 this 와 마찬가지로 상위 스코프의 arguments를 참조한다.
Rest파라미터는 매개변수 이름 앞에 세개의 점을 붙여서 사용하낟. 함수에 전달된 인수들의 목록을 배열로 전달받는다.
function foo(...rest) {
console.log(rest); // [1,2,3,4,5]
}
foo(1,2,3,4,5);
// ...rest 파라미터를 일반 매개변수와 함께 쓸 수 있으며 rest 파라미터가 먼저오거나 두개를 사용할 수는 없다.
function bar(param, ...rest){
console.log(param); // 1
console.log(rest); // [2,3,4,5]
}
foo(1,2,3,4,5);
function sum(x = 0, y = 0){
return x + y;
}
console.log(sum(1,2)); // 3
console.log(sum(1)); //1