이 바인딩 자바 스크립트가 손실 및 솔루션된다

일반적인 실수 :이 바인딩 규칙을 혼동.

다음과 같이 코드입니다 :

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);

추천

출처www.cnblogs.com/wljqds/p/11318802.html