0

我正在学习基于javascript的PHASER HTML5游戏开发框架,在此期间我遇到了这段我无法理解的代码

var BunnyDefender = {};        

BunnyDefender.Boot = function(game) {};

BunnyDefender.Boot.prototype = {    


preload: function()
   {                                       
    //-----to load objects and units before we begin our game
    this.load.image('preloadbar', 'images/loader_bar.png');         
    this.load.image('titleimage', 'images/TitleImage.png');
   },

create: function() 
    {

    this.input.addPointer();
    this.stage.backgroundColor = '#171642';

    this.state.start('Preloader');     // launches preloader from Boot.js         
     }

};  

从我学到的关于 javascript 原型的知识中,为了向对象或构造函数添加任何方法,我们使用以下语法/示例:

 function employee(name,jobtitle,born)
  {
     this.name=name;
     this.jobtitle=jobtitle;
     this.born=born;
  }

 var fred=new employee("Fred Flintstone","Caveman",1970);
 employee.prototype.salary=null;
 fred.salary=20000;

请帮忙 !!!

4

2 回答 2

1

因此,根据我从问题中了解到的情况,您不清楚 javascript 中的静态方法/属性。

可以随时调用静态方法,而无需创建new类的实例。静态方法只是相关的代码,可以做一些事情,比如配置一个类或维护一种设计模式,比如创建/返回类的单例实例。

// Constructor
var BunnyDefender = {};

// Prototype declarations
BunnyDefender.prototype = { ... }

// Static method implementing a crude singleton
BunnyDefender.Boot = function() {
    // Check if the static property _instance exists
    // if it doesn't. Create it one time only, thus our
    // BunnyDefender singleton is born.
    if ( ! BunnyDefender._instance )
        BunnyDefender._instance = new BunnyDefender();

    // Return the already created instance of BunnyDefender
    return BunnyDefender._instance;
};

作为Boot类的静态方法,BunnyDefender我们可以在不创建 bunny defender 的新实例的情况下调用它。

var bunnyDefender = BunnyDefender.Boot();

您可以在 javascript 教程/文档(例如本文)中阅读有关静态属性/方法的更多信息。

于 2014-08-24T10:55:17.593 回答
0

当使用新语句时。

var myobject = new BunnyDefender.boot();

原型的所有原型属性/对象,(或用编程术语表示,由新对象继承)。

例如,假设我在继承链的末尾向原型属性添加了一个原型属性。

Object.prototype.myproperty = true;

现在我创建的任何对象都将继承 myproperty。

var a={}; /* object literal equiv to new Object(); */
document.write(a.myproperty); /* true */

我可以更改我的 a 对象的 myproperty,该对象在我的 a 对象下创建一个 myproperty,但不会更改prototype.myproperty。a.myproperty 是读/写的,但如果它不存在,它会从继承中读取以查找属性。

这允许一个人做的是创建一个我可以使用新语句复制的 API。创建的新对象不会干扰使用相同构造函数创建的任何其他对象。

在代码中的某个地方我期望

var newgame = var new BunnyDefender.boot(); 

我不确定他们为什么要在游戏中使用这种方法?我使用这种方法的原因是当我想要大量使用相同 API / lib 但由于对象还包含特定 HTML 元素上的属性等细节而发生变化时。

也许每个兔子都是自己的对象?

var bunny1 = var new BunnyDefender.boot();
var bunny2 = var new BunnyDefender.boot();

每个兔子都会得到一个完整的 API,可以使用 this.reference。共享相同的图像等。如果是狩猎游戏,每个兔子可能位于屏幕上的不同位置,并且在吃完后具有不同的品质等。兔子2 发生的事情不会影响兔子1。

以大写字母开头的函数是一种常见的做法,表明它是一个构造函数。

于 2014-08-24T10:30:45.053 回答