JAVASCRIPT:"this"关键字在下面的Prototype模式中指的是什么(Phaser框架)

JAVASCRIPT: what does "this" keyword refer to in the Prototype pattern below (Phaser framework)

//HTML code
<!doctype html>
    <head>
    <script src="phaser.min.js"></script>
    <script src="src/boot.js"></script>
    <style>body{margin:0}</style>
    <script>    

    var letsgo = function() {
    var game = new Phaser.Game(320, 480, Phaser.CANVAS, "game");
    game.state.add("Boot",boot);
    game.state.start("Boot");
    };
    letsgo();

    </script></head><body></body>
</html>

******boot.js***** 
var boot = function(game){};

boot.prototype = {     //prototype pattern
    preload: function(){
    this.game.load.image("loading","assets/loading.png");       
    },
    create: function(){ // this code is not important
        this.scale.scaleMode = Phaser.ScaleManager.SHOW_ALL;
        this.scale.pageAlignHorizontally = true;
        this.scale.setScreenSize();
    }
}

thisthis.game.load.image("loading","assets/loading.png");中指的是什么?没有原型它指的是 boot 对象。但是对于原型模式,它采用不同的对象值。我试图找出那个对象的价值是什么。有什么想法吗?

这是一个伪经典实例化模式。 (你可以分辨出来,因为它使用了 this 和 .prototype。)所以 "this" 指的是它的实例。

This 是关于该主题的非常好的博客。

简而言之,伪经典实例化是通过放置一个new关键字来完成的。您以前可能见过这样的东西:var instance = new Constructor(params);?

new 关键字的作用是在运行时将两行代码添加到任何已经存在的代码中。即,

var Person = function(name, age) {
  // new keyword adds this line:
  // this = Object.create(Person.prototype);
  this.name = name;
  this.age = age;

  // it also adds this line:
  // return this;
}

在此模式中与属性分开的函数,因为它们不会随着实例的不同而改变。所以在这种情况下(并反映你的例子)我们将有:

Person.prototype.greet = function() {
  console.log(this.name);
};
// .... more functions here.

或者,如您的示例所示,他们通过这样做完全覆盖了原型对象:

Person.prototype = {
  greet : function() {
    console.log(this.name);
  },
  ...
}

所以,简而言之 "this" 将引用创建的任何实例。 var bob = new Person("Bob", 40); 对于 bob,this 指的是具有属性 name = "Bob", age = 40.

的对象

我们可以创建多个实例: var sally = new Person("Sally", 34); 现在对于 sally,"this" 指向具有属性 name = "Sally", age = 34.

的对象

这两者可以共存,我们不必担心它们以后如何使用,因为 "this" 会跟踪给定的实例。

代码段中的标记 "this" 将引用使用 "new" 关键字针对构造函数 "boot" 创建的任何对象。

例如,如果脚本中的其他地方有这样一行:

var myBoot = new boot(someGame);

myBoot 将指向 "this" 所指的内容。