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

我是一名初级javascript程序员。我找不到以下函数中
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()