일반적인 실수 :이 바인딩 규칙을 혼동.
다음과 같이 코드입니다 :
var obj = {
id: 'vexekefo',
cool() {
console.log(this.id);
}
};
var id = 'someone';
obj.cool(); // vexekefo
setTimeout(obj.cool, 100); // someone
왜이 출력입니까?
setTimeout
내장 기능이 더 이상 객체 OBJ ID 값을 손실되지 않습니다 바인딩합니다. 대신 전역의 출력 따라서 ID 값 obj.id
.
용액의 두 종류 : 화살표 기능 bind()
: 화살표 원리 함수되고 이 현재 어휘 범위의 원래 값으로 덮여있다.
결합은이 함수의 첫 번째 파라미터 바인딩을 지정한다.
// 箭头函数
var obj = {
id: 'vexekefo',
cool() {
console.log(this.id);
}
};
var id = 'someone';
obj.cool();
setTimeout(() => {obj.cool()}, 100);
// bind()
var obj = {
id: 'vexekefo',
cool: function(){
console.log(this.id);
}
};
var id = 'someone';
obj.cool();
setTimeout(obj.cool.bind(obj), 100);