2017-12-19 9 views
1

일부 조건으로 객체를 반환해야하는 다음 스 니펫이 있지만이 오류가 발생했습니다 : Uncaught TypeError: Cannot read property 'obj1' of undefined. 그러나 콘솔을 사용하여 li 개체에서이 데이터를 볼 수 있습니다.데이터 속성에 의한 jQuery 필터

for(var i = 0; i < 15; i++){ 
 

 
    li = $('<li>List</li>'); 
 
    $(li).data('test', {obj1: (i < 10 ? 'some' : 'any')}); 
 
    $(li).appendTo('#list'); 
 
} 
 

 
var f = $('#list li').filter(() => { 
 
    return $(this).data('test').obj1 == 'any' 
 
}); 
 

 
console.log($(f));
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<ul id ="list"> 
 

 
</ul>

답변

2

엄지 손가락의 기본 규칙은 관련 UI 물건을 운반 할 때 화살표 기능을 사용하지 않도록한다. 화살표 함수가 자신의 실행 컨텍스트를 바인딩하기 때문에 이벤트 처리기 등으로. 그리고 어떤 방법으로도 재정의 될 수 없습니다.

var f = $('#list li').filter(function() { 
    return $(this).data('test').obj1 == 'any' 
}); 

화살표 기능 대신 일반 익명 기능을 사용하십시오. 그래도 화살표 기능을 사용하려면 this이 실행 컨텍스트를 가리 킵니다. 그것은 실행자의 window 개체를 가리 킵니다.