【发布时间】:2013-01-19 19:50:15
【问题描述】:
我正在尝试理解 jQuery 类,但进展并不顺利。
我的目标是以这种方式使用课程(或学习更好的方法):
var player = new Player($("playerElement"));
player.InitEvents();
使用其他人的例子,这是我尝试过的:
$.Player = function ($) {
};
$.Player.prototype.InitEvents = function () {
$(this).keypress(function (e) {
var key = e.which;
if (key == 100) {
MoveRight();
}
if (key == 97) {
MoveLeft();
}
});
};
$.Player.prototype.MoveRight = function () {
$(this).css("right", this.playerX += 10);
}
$.Player.prototype.MoveLeft = function () {
$(this).css("right", this.playerX -= 10);
}
$.Player.defaultOptions = {
playerX: 0,
playerY: 0
};
最终目标是使用键盘字母A 和D 让角色在屏幕上左右移动。
我觉得我在这个“类”上做错了什么 但我不知道为什么。
(对不起我的英语)
【问题讨论】:
-
this在实例方法中引用实例对象本身,因此您不能使用$(this).keypress、$(this).css等,因为this不引用 DOM 元素或查询字符串。您的函数调用也是错误的,它应该读取this.MoveRight()但由于您在将this上下文设置为 DOM 元素本身的 jQuery 处理程序中,您需要将实例的this分配给变量 a在范围链中升级,以便您可以在处理程序中访问它以调用其MoveRight/MoveLeft方法。 -
你能告诉我你将如何改变我的代码来解决我提出的问题吗?如果我能比较好的代码和我的代码,我会更容易看到我做了什么。 (如果不是太难)
-
我可以试试 man,但它比“修复”更接近完全重写。
:P我看看能不能做个简单的例子。 -
这里是评论版本jsfiddle.net/gVhj8
标签: javascript jquery class keyboard-events