在这种情况下,“这个”如何运作?

时间:2017-05-09 19:35:25

标签: javascript this

我有一个关于关键字“this”如何在以下上下文中起作用的问题。这是一个带有phaser框架的tutorial,代码如下所示(我只是将它们合并在一起):

var game = new Phaser.Game(400, 490);
game.state.add('main', mainState); 
game.state.start('main');

var mainState = {
  preload: function() {},

  create: function() { 
    this.bird = game.add.sprite(100, 245, 'bird');
  },

  update: function() {}
};

在create函数中有一个'this'。我想我明白这是做什么的,但这个例子证明我错了。 this关键字 - 在此上下文中 - 指向mainState,正确(只是一些信息:一旦调用mainState启动第3行,创建函数就会启动)?

我可以访问mainState对象之外的鸟(通过 mainstate.bird ),但为什么不能在游戏对象之外定义如下的原型函数?

mainState.prototype.myFunction() {}

我会收到一个错误,并且我无法解释。

2 个答案:

答案 0 :(得分:-2)

mainState是一个对象文字。 '原型'是用于原型继承的javascript中的函数对象的属性。 Javascript Prototype

答案 1 :(得分:-2)

有一件事总能帮助我记住this将会是什么,要注意谁正在调用该函数,请查看此代码段



var sayHi = function() { console.log(this.name) }

var yoda = { name: "Yoda", sayHi: sayHi }
var darthVader = { name: "Anakin Skywalker", sayHi: sayHi }

// the `this` here will be the yoda object
yoda.sayHi()
// the `this` here will be the darthVader object
darthVader.sayHi()

window.name = "Global name"
// here, since nothing was specified, the object is the global object, or the window on browsers, this the same as "window.sayHi()"
sayHi()