2012-05-27 4 views
0

Modernizr과 터치 이벤트 테스트를 실행 중이며 테스트가 정상적으로 실행되고있는 것처럼 보입니다. 그러나 테스트가 성공적으로 수행 된 경우에만 호출하는 함수입니다. Modernizr 테스트가 실패한 후에도 함수가 계속 적용됩니다.

테스트입니다 :

Cluster.prototype.test_touch_event_support = function(callback) { 
    return (Modernizr.touch) ? callback : log("Touch Support Undetected"); 
}; 

그리고이 테스트에 성공하는 경우에만 실행해야하는 기능입니다 : 그것은 아무튼에도 불구하고,

Cluster.prototype.initiate_shop_touch_events = function() { 
    var self = this; 
    return $("#" + this.shop_wrapper_id).hammer({prevent_default: true, drag_min_distance: Math.round(this.viewport_width * 0.1)}).bind("drag", function(ev) { 
     var data = JSON.parse(self.get_local_storage_data(self.shop_data_key)); 
     var step = (ev.direction == "left") ? 1 : -1; 
     var new_page = parseInt(data.current_page + step); 
     return (new_page > 0 && new_page <= data.total_pages) ? $(self.shop_navigation_class).jPages(new_page) : false; 
}); 
}; 

그리고 내가 지금처럼 확인 해요 테스트에 합격하는 논쟁에 의존하지 마십시오.

self.test_touch_event_support(self.initiate_shop_touch_events()); 

누군가가 기능이 왜 sti인지 말해 줄 수 있습니까? 달릴거야? 터치 이벤트가 지원되지 않는다는 메시지도 콘솔에 표시되기 때문에

답변

2
self.test_touch_event_support(self.initiate_shop_touch_events()); 

당신이해야 할

self.test_touch_event_support하는 전화 self.initiate_shop_touch_events의 결과를 전달합니다 :

self.test_touch_event_support(self.initiate_shop_touch_events); 

함수를 전달합니다.

Cluster.prototype.test_touch_event_support = function(callback) { 
    return (Modernizr.touch) ? callback : log("Touch Support Undetected"); 
}; 

에서

당신은 전화 콜백하지 참조 그것을해야합니다.

Cluster.prototype.test_touch_event_support = function(callback) { 
    return (Modernizr.touch) ? callback.call (this) : log("Touch Support Undetected"); 
}; 

수업 빼앗아 :

  1. 는 함수를 호출하고 참조의 차이를 이해합니다. 많은 프로그래밍 언어와는 달리, JavaScript의 함수는 1 급 엔티티입니다. 당신은 그들의 이름을 불러서 그들에 대한 참조를 전달할 수 있습니다. 함수를 호출, 호출 또는 실행하려면 함수 참조 직후에 대괄호로 묶인 인수 목록을 지정해야합니다.
  2. 호출 될 때 모든 함수는 함수 본문에 단어 this을 사용하여 참조 된 컨텍스트 매개 변수를 전달합니다. 이것은 종종 함수 이름 앞에 오브젝트 참조를 붙여서 지정합니다. obj.func (123)이 호출에서 함수 본문 this을 참조 할 때마다 obj 개체가 사용됩니다. 이 용도로 함수는 객체의 정의 된 메소드 여야합니다. callapply 함수 방법을 사용하여이 컨텍스트 인수를 명시 적으로 지정할 수 있습니다. funcobj이 아닌 경우 func.call (obj, 123)은 위의 것과 같습니다.

자세한 내용은 인수가 함수 인 경우에도 여기 https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

+0

를 찾을 수 있습니까? – Roland

+2

@Roland 예, 함수의 _result_가 아닌 함수에 _reference_를 전달해야하므로 가능합니다. – Alnitak

+0

내가 테스트 한 것을 볼 수 있으며 터치 이벤트가 활성화되어있는 경우 함수가 실행되지 않는 것처럼 보입니다 :) 아마도 인수가 함수가 아닌 참조 일 뿐이므로? – Roland

관련 문제