JAVASCRIPT:“this”关键字在下面的Prototype模式中引用了什么(Phaser框架)

时间:2015-06-27 23:43:35

标签: javascript 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对象。但是对于原型模式,它需要不同的对象值。我试图找出该对象的价值。有什么想法吗?

2 个答案:

答案 0 :(得分:0)

这是一种伪经典实例化模式。 (你可以说,因为它使用了这个和.prototype。)所以&#34;这个&#34;指它的实例。

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);
  },
  ...
}

所以,简而言之 &#34;这&#34;将引用创建的任何实例。 var bob = new Person("Bob", 40); 对于bob,这指的是具有属性名称=&#34; Bob&#34;,age = 40的对象。

我们可以创建多个实例: var sally = new Person("Sally", 34); 现在为莎莉,&#34;这个&#34;指向具有属性名称=&#34; Sally&#34;,age = 34。

的对象

这两者都可以共存,我们不必担心以后会如何使用这些因为&#34;这个&#34;跟踪给定的实例。

答案 1 :(得分:-1)

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

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

var myBoot = new boot(someGame);

myBoot将是“this”所指的。