javascript - Modernizr 测试失败后功能仍然适用

标签 javascript touch 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());

有人可以告诉我为什么该函数仍在运行吗?因为我还在控制台中收到不支持触摸事件的消息。

最佳答案

self.test_touch_event_support(self.initiate_shop_touch_events());

调用 self.initiate_shop_touch_events 的结果传递给 self.test_touch_event_support

你需要做:

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 中的函数是一流的实体。您可以通过调用他们的名字来传递对他们的引用。要调用、调用或执行函数,您必须在函数引用之后立即指定一个用括号括起来的参数列表(可能为空)。
  2. 调用时,所有函数都会传递一个上下文参数,该参数在函数主体中使用单词 this 引用。这通常是通过在函数名称前面加上对象引用来指定的,例如obj.func (123) 在此调用中,每次函数体引用 this 时,都会使用对象 obj。对于这种用法,该函数必须是该对象的已定义方法。函数的 callapply 方法可用于显式指定此上下文参数:func.call (obj, 123) 相当于当 func 不是 obj 的方法时,执行上述操作。

更多详细信息可以在这里找到https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Function

关于javascript - Modernizr 测试失败后功能仍然适用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10773026/

相关文章:

javascript - html,JS搜索字段列表

android - Canvas 可绘制对象和居中缩放

javascript - 替换innerHTML后touchmove事件停止

angular - 将自定义 Modernizr 构建集成到 Angular 项目中的最佳方法是什么?

javascript - pyodide : ReferenceError: SharedArrayBuffer is not defined

javascript - loadasync 函数导入的外部脚本什么时候执行?

javascript - 如何将变量从剑道网格传递到模板函数

wpf - 区分 TouchUp 和 TouchLeave 以及 TouchDown 和 TouchEnter 的策略?

javascript - 响应式网页 : SVG visualization?

javascript - 为什么 Gmail 在动态加载 Modernizr 后会变得疯狂?