gpt4 book ai didi

JavaScript 的数组调用和函数在 Prototype 中失败

转载 作者:行者123 更新时间:2023-12-02 19:32:49 25 4
gpt4 key购买 nike

我有这个代码:

function Keyboard() {

this.log = $('#log')[0];
this.pressedKeys = [];

this.bindUpKeys = function() {
$('body').keydown(function(evt) {
this.pressedKeys.push(evt.keyCode);

var li = this.pressedKeys[evt.keyCode];

if (!li) {
li = this.log.appendChild(document.createElement('li'));
this.pressedKeys[evt.keyCode] = li;
}

$(li).text('Down: ' + evt.keyCode);
$(li).removeClass('key-up');
});
}

this.bindDownKeys = function() {
$('body').keyup(function(evt) {
this.pressedKeys.push(evt.keyCode);

var li = this.pressedKeys[evt.keyCode];

if (!li) {
li = this.log.appendChild(document.createElement('li'));
}

$(li).text('Up: ' + evt.keyCode);
$(li).addClass('key-up');
});
}

}

我收到这些错误:

TypeError: 'undefined' is not an object (evaluating 'this.pressedKeys.push')

我想对数组做什么并不重要,它只是不断地给我带来访问错误,就好像它不存在于原型(prototype)中一样。

我做错了什么? :( 我只是像原型(prototype)中的任何其他值一样访问数组)。对象内部的对象是否存在问题?

最佳答案

问题是在事件处理程序内部 this 并不是你想象的那样。您可以使用 bind 方法绑定(bind)事件处理函数(或者,因为看起来您正在使用 jQuery,$.proxy ):

this.bindUpKeys = function() {
var that = this;
$('body').keydown($.proxy(function(evt) {
//Use `this` as normal inside here
}, this));
}

或者您可以在事件处理程序之外存储对 this 的引用,例如

this.bindUpKeys = function() {
var that = this;
$('body').keydown(function(evt) {
//Use `that` instead of `this` in here
});
}

关于JavaScript 的数组调用和函数在 Prototype 中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11309789/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com