//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();
}
}
this
中this.game.load.image("loading","assets/loading.png");
引用的内容是什么?没有原型,它引用boot
对象。但是对于原型模式,它需要不同的对象值。我试图找出该对象的价值。有什么想法吗?
答案 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”所指的。