现有功能未定义
existing function is undefined
我正在使用 hammer.js 库:http://hammerjs.github.io/ 并使用它的 jQuery 插件。很少有像 'panright panleft press' 这样的事件发生时您可以调用函数。我正在尝试调用 cardSwipe(..) 函数,但是收到一个控制台错误,指出 cardSwipe 未定义。我不知道是什么原因造成的。
/* Initiate HammerJS on elements */
initHammer : function()
{
/* Create Hammer object for swipable game cards */
Game.$gameCard = $('.game-card-mobile');
Game.$gameCardTouch = Game.$gameCard.hammer();
Game.$gameCardTouch.on("panleft panright press", cardSwipe(ev, $(this), data));
},
cardSwipe : function(ev, element, data) {
console.log(ev.type);
console.log(element);
console.log(data);
}
编辑:添加 Game.cardSwipe 解决了这个问题,但现在我得到一个错误:ev 未定义,其中 ev 是一个 hammer.js 事件并且应该被识别(如果我交换我的函数函数(ev) {..} )
那是因为 cardSwipe
在该上下文中确实是未定义的,它是父对象的一部分并且可以通过 this.cardSwipe
访问
initHammer : function() {
Game.$gameCard = $('.game-card-mobile');
Game.$gameCardTouch = Game.$gameCard.hammer();
Game.$gameCardTouch.on("panleft panright press", this.cardSwipe(ev, $(this), data));
},
cardSwipe : function(ev, element, data) {
console.log(ev.type);
console.log(element);
console.log(data);
}
看起来你是马上调用它,而不是引用它,一般你会把它转换成这样
Game.$gameCardTouch.on("events", this.cardSwipe);
或者如果您需要参数,请使用匿名函数
initHammer : function() {
var self = this;
Game.$gameCardTouch.on("panleft panright press", function() {
self.cardSwipe(ev, $(self), data);
});
},
cardSwipe : function(ev, element, data) {
}
但我不知道 cardSwipe
到底是什么 returns,以及它应该如何工作?
在您的代码中,cardSwipe
函数是某个对象的 属性。您将必须使用该对象引用,如:
obj.cardSwipe(...)
为了调用它 - 其中 obj
是包含 属性 的对象。
我不知道您代码的整个上下文,但似乎合适的参考可能是:
this.cardSwipe(...);
因为您是从同一对象的方法调用它的。
与其他一些语言不同,当前对象上的方法不会自动在范围内。您必须使用 this
来引用当前对象才能访问 属性 或调用当前对象的方法。
此外,您似乎正在尝试设置事件处理程序。在这种情况下,您可能不想立即调用 cardSwipe()
,而是传递一个函数引用,您需要将 this
的值保存到本地,以便您可以在回调中引用它:
initHammer : function() {
var self = this;
Game.$gameCard = $('.game-card-mobile');
Game.$gameCardTouch = Game.$gameCard.hammer();
Game.$gameCardTouch.on("panleft panright press", function() {
self.cardSwipe(ev, $(self), data));
});
},
我正在使用 hammer.js 库:http://hammerjs.github.io/ 并使用它的 jQuery 插件。很少有像 'panright panleft press' 这样的事件发生时您可以调用函数。我正在尝试调用 cardSwipe(..) 函数,但是收到一个控制台错误,指出 cardSwipe 未定义。我不知道是什么原因造成的。
/* Initiate HammerJS on elements */
initHammer : function()
{
/* Create Hammer object for swipable game cards */
Game.$gameCard = $('.game-card-mobile');
Game.$gameCardTouch = Game.$gameCard.hammer();
Game.$gameCardTouch.on("panleft panright press", cardSwipe(ev, $(this), data));
},
cardSwipe : function(ev, element, data) {
console.log(ev.type);
console.log(element);
console.log(data);
}
编辑:添加 Game.cardSwipe 解决了这个问题,但现在我得到一个错误:ev 未定义,其中 ev 是一个 hammer.js 事件并且应该被识别(如果我交换我的函数函数(ev) {..} )
那是因为 cardSwipe
在该上下文中确实是未定义的,它是父对象的一部分并且可以通过 this.cardSwipe
initHammer : function() {
Game.$gameCard = $('.game-card-mobile');
Game.$gameCardTouch = Game.$gameCard.hammer();
Game.$gameCardTouch.on("panleft panright press", this.cardSwipe(ev, $(this), data));
},
cardSwipe : function(ev, element, data) {
console.log(ev.type);
console.log(element);
console.log(data);
}
看起来你是马上调用它,而不是引用它,一般你会把它转换成这样
Game.$gameCardTouch.on("events", this.cardSwipe);
或者如果您需要参数,请使用匿名函数
initHammer : function() {
var self = this;
Game.$gameCardTouch.on("panleft panright press", function() {
self.cardSwipe(ev, $(self), data);
});
},
cardSwipe : function(ev, element, data) {
}
但我不知道 cardSwipe
到底是什么 returns,以及它应该如何工作?
在您的代码中,cardSwipe
函数是某个对象的 属性。您将必须使用该对象引用,如:
obj.cardSwipe(...)
为了调用它 - 其中 obj
是包含 属性 的对象。
我不知道您代码的整个上下文,但似乎合适的参考可能是:
this.cardSwipe(...);
因为您是从同一对象的方法调用它的。
与其他一些语言不同,当前对象上的方法不会自动在范围内。您必须使用 this
来引用当前对象才能访问 属性 或调用当前对象的方法。
此外,您似乎正在尝试设置事件处理程序。在这种情况下,您可能不想立即调用 cardSwipe()
,而是传递一个函数引用,您需要将 this
的值保存到本地,以便您可以在回调中引用它:
initHammer : function() {
var self = this;
Game.$gameCard = $('.game-card-mobile');
Game.$gameCardTouch = Game.$gameCard.hammer();
Game.$gameCardTouch.on("panleft panright press", function() {
self.cardSwipe(ev, $(self), data));
});
},