'this' keyword
외워둬야 함
: window
this //=> Window {...}
: window
function foo() {
console.log(this);
}
foo() //=> Window {...}
: 부모 object
var obj = {
fn: function() { console.log(this); }
}
obj.fn() //=> {fn: f}
var obj2 = {
hello: {
fn: function() { console.log(this); }
}
}
obj.hello.fn() //=> {fn: f}
//method invocation의 this: 바로 자기 위의 부모만 가져옴
3, 4는 사실상 같은 의미
: 새로 생성된 객체
function Car(brand, name, color) {
this.brand = brand;
this.name = name;
this.color = color;
}
Car.prototype.drive = function() {
console.log(this.name + '가 운전을 시작합니다');
}
let myCar = new Car('chrysler', '300c', 'black');
myCar.color; //'black'
myCar.drive; //'300c가 운전을 시작합니다'
.call()
or .apply()
invocation: .call()
, .apply()
의 첫번째 인자로 명시된 객체
function identify() {
return this.name.toUpperCase();
}
function speak() {
var greeting = "Hello, I'm " + identify.call(this);
console.log(greeting);
}
var me = { name: "Rami" };
var you = { name: "Reader" };
identify.call( me ); // RAMI
identify.call( you ); // READER
speak.call( me ); // Hello, I'm RAMI
speak.call( you ; // Hello, I'm READER
.call()
과 .apply()
의 차이var add = functrion (x, y) {
this.val = x, y;
}
var obj = {
val: 0
};
add.apply(obj, [2, 8]);
console.log(obj.val); // 10
add.call(obj, 2, 8);
console.log(obj.val); // 10
.apply()
를 사용하는 이유var arr = [2, 10, 1, 0, 4];
Math.max(2, 10, 1, 0, 4); // 10
Math.max.apply(null, arr); //10