2017-05-09 57 views
0

我有一个关于如何在以下上下文中使用关键字'this'的问题。 Here's与移相器框架和代码tutorial看起来如下(我简单地合并在一起,它为你):'this'在这种情况下如何工作?

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() {} 
}; 

在创建函数有一个“本”。我想我明白这是做什么的,但这个例子证明我错了。 this关键字 - 在这种情况下 - 指向mainState,正确(只是一些信息:创建函数启动一旦mainState被称为启动第三行)?

我可以(通过mainstate.bird)访问mainState对象外的鸟,但为什么没有可能再定义类的游戏对象之外以下的原型功能?

mainState.prototype.myFunction() {} 

我会得到一个错误调用这个,我无法解释。

+0

也许,因为你必须至少写'mainState.prototype ...'。我认为,这是建议使用原型与JavaScript“类” – Guybrush

+0

@Guybrush我的意思是'mainState'。编辑它 - 谢谢。 – Faizy

+0

你也可以看看这里:http://stackoverflow.com/questions/43246989/the-value-of-this-inside-a-function/43247403#43247403。所以这是一个可能重复的问题。 – Guybrush

回答

-2

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

-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()

-2

如果你想你的方法在原型上,您可以创建一个构造函数MainState,并附上您的原型方法:

function MainState(game) { 
    this.game = game; 
} 

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

MainState.prototype.myFunction = function() { }; 

// etc. 

var mainState = new MainState(game); 

mainState.myFunction(); 
相关问题