Javascript 赋值后未定义的变量
我是一名初级javascript程序员。我找不到以下函数中Javascript 赋值后未定义的变量,javascript,phaser-framework,Javascript,Phaser Framework,我是一名初级javascript程序员。我找不到以下函数中winX和WinY变量存在未定义的值的原因: var game = new Phaser.Game( 800, 600, Phaser.AUTO, 'game', { init: init, preload: preload, create: create, update: update, randomizeWin: randomizeWin, myMethod: myMet
winX
和WinY
变量存在未定义的值的原因:
var game = new Phaser.Game(
800,
600,
Phaser.AUTO,
'game',
{ init: init,
preload: preload,
create: create,
update: update,
randomizeWin: randomizeWin,
myMethod: myMethod
}
);
function init() {
this.sss=56;
this.marginX=150;
this.marinY=100;
}
function preload() {
var wood = game.load.image('wood', 'assets/wood.jpg');
randomizeWin();
console.log(this.winY);
}
function create() {
this.p=[];
for(var i=0;i<3;i++) {
this.p[i]=[];
for(var j=0;j<3;j++){
this.p[i][j]= game.add.sprite(this.marginX+i*170, this.marinY+j*170, 'wood');
this.p[i][j].scale.x=0.2;
this.p[i][j].scale.y=0.2;
this.p[i][j].anchor.setTo(.5,.5);
this.p[i][j].inputEnabled = true;
this.p[i][j].input.useHandCursor = true;
this.p[i][j].events.onInputDown.add(myMethod, this);
}
}
}
function update() {
}
function myMethod(sprite) {
console.log(this.p[this.winX][this.winY]==sprite);// winX is undefined here why??
if(this.p[this.winX][this.winY]==sprite){
game.add.tween(sprite.scale).to ({
x: sprite.scale.x * -1,
// y: sprite.scale.y * -1
}, 1000, Phaser.Easing.Bounce.Out, true);
}
}
function randomizeWin() {
console.log("rand");
this.winX = Math.floor(Math.random() * 3);
this.winY = Math.floor(Math.random() * 3);
}
var game=new Phaser.game(
800,
600,
自动移相器,
“游戏”,
{init:init,
预加载:预加载,
创建:创建,
更新:更新,
randomizeWin:randomizeWin,
myMethod:myMethod
}
);
函数init(){
这个。sss=56;
这个.marginX=150;
这个。marinY=100;
}
函数预加载(){
var wood=game.load.image('wood','assets/wood.jpg');
randomizeWin();
console.log(this.winY);
}
函数create(){
这个.p=[];
对于(var i=0;ithis
的值取决于调用上下文
您可能需要绑定有问题的对象,大致如下:
this.p[i][j].events.onInputDown.add(myMethod.bind(this), this);
(但就您的代码目前的情况而言,这将有相同的问题)或者依赖于所讨论的框架以绑定的方式提供的任何内容
欢迎来到JS。在JS上使用这个会带来一个痛苦的世界。你应该避免它,直到你真正确定或者将它重命名为你范围内的其他东西:
var self = this;
function create() {
self.p = [];
//etc
}
function randomizeWin(){
self.winX = Math.floor(Math.random() * 3);
self.winY = Math.floor(Math.random() * 3);
}
function myMethod(sprite){
console.log(self.p[self.winX][self.winY]==sprite);
}
正如大家所料:你还没有定义它。@connexo对一个初学者JS程序员没有帮助;但就他而言,他有。这是一个不理解JS中这个的本质的问题。它不是在randomizeWin()中定义的吗函数,很抱歉,但您能否解释一下,在使用变量之前,我应该复制什么和/或调用randomizeWin()