gpt4 book ai didi

方法调用模式中的 Javascript "this"指针未指向对象

转载 作者:行者123 更新时间:2023-11-29 15:43:24 25 4
gpt4 key购买 nike

我正在尝试在 Javascript 中使用方法调用模式。我将函数声明为对象成员。

根据 Javascript: The Good Parts,这应该导致 this 指针引用封闭对象。当我以前尝试过时,情况就是这样。

在下面的代码示例中,单个 console.log 语句引用的 this 指针指向函数,而不是目的。我仔细检查了我的代码,老实说我不知道​​发生了什么。

我可以用另一双眼睛看这个。是否有什么明显的东西是我在这里遗漏的,或者我是否期待错误的行为?谢谢。

编辑:我发布的代码中有一个错误(它一直在变化);匿名函数中的关键字应该是that,而不是this。固定。

双重编辑:我已将其余代码添加到模块中。我正在尝试编写一个 commonJS 模块(根据我正在使用的 gameJS 库),虽然我不确定问题出在哪里,但我想知道是否是。这会改变什么吗?

var gamejs = require('gamejs');
var system = require('app/system');

var input = {
eval_keys: function () {
console.log(this); // This should be the outer object, but shows the function!
var that = this;
gamejs.event.get().forEach(function (event) {
if (event.type === gamejs.event.KEY_DOWN) {
for (var key in that.keyconfig) {
if (that.keyconfig.hasOwnProperty(key)) {
if (event.key === gamejs.event[key]) {
that.keyconfig.key = true;
}
}
}

system.log("KEYDOWN", event.key);
}

if (event.type === gamejs.event.KEY_UP) {
for (var key in that.keyconfig) {
if (that.keyconfig.hasOwnProperty(key)) {
if (event.key === gamejs.event[key]) {
that.keyconfig.key = false;
}
}
}

system.log("KEYUP", event.key);
}

return keyconfig;
});
},
eval_mouse: function () {
/* in progress
else if (event.type === gamejs.event.MOUSE_MOTION) {
// if mouse is over display surface
if (display.rect.collidePoint(event.pos)) {
system.log("mousemove", testcoords);
testcoords = event.pos;
}
}
*/
},
keyconfig: {
K_UP: false,
K_LEFT: false,
K_RIGHT: false,
K_DOWN: false
}
};

exports.eval_keys = input.eval_keys;

Chrome 开发控制台的输出:

Object {eval_keys: function}
eval_keys: function () {
arguments: null
caller: null
length: 0
name: ""
prototype: Object
__proto__: function Empty() {}
<function scope>
__proto__: Object

最佳答案

好像是does work对我来说,在声明对象后调用 input.eval_keys()

在我看来,您在控制台中显示的输出也是您想要的输出——即包含该方法的外部对象 Object {eval_keys: function}

问题似乎更多是您应该看到您在其中声明的其他方法,如下所示:

Object {eval_keys: function, eval_mouse: function, keyconfig: Object}
eval_keys: function () {
eval_mouse: function () {
keyconfig: Object
__proto__: Object

因此,据我所知,您的问题应该是“为什么这些其他方法没有出现在我的控制台对象中?”但我不知道您还用代码做了什么,也不知道您如何以及何时调用相关方法。

希望这对您有所帮助。

关于方法调用模式中的 Javascript "this"指针未指向对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15602039/

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