javascript не может вызвать метод в __prototype__, говорит, что Object [object Object] не имеет метода «display» - PullRequest
0 голосов
/ 17 марта 2011

РАЗРЕШЕНО, БЫЛА ОШИБКА В МОЕМ КОДЕКСЕ

Я тестирую синтез moo4q jQuery-MooTools (http://moo4q.com/) в простой игре и сталкиваюсь с проблемой. Вот фрагмент кода, который вызывает проблему:

// write score counter, puts up overlay, load image
initGame: function () {

    this.app.unbind('loadingDone',this.initGame);

    this.setupHUD();
    this.gameObjects['scoreCounter'].html('1000');
    var imgLib = this.imgs[this.gameType];
    var img = imgLib.getUniqueImage();
    this.log(img);
    img.display(this.gameObjects['imageHolder']);

    this.gameObjects['overlay'].fillRect(0, 0, 320, 460);
    $(this.gameObjects['overlay'].canvas).bind('click', $.proxy(this.pokeHole, this));

},

В качестве объяснения this.gameObjects ['imageHolder'] - это контекст холста, передаваемый объекту img, чтобы указать ему, где рисовать. В частности, в строке 'img.display (this.gameObject [' imageHolder ']); Я получаю ошибку

Uncaught TypeError: Object [object Object] has no method 'display'

от Chrome

Вывод трассировки журнала, вызванной на линии непосредственно перед вызовом (который является просто обернутым window.console.log):

[Class.newClass.constructor
 file: Object
 keyword_list: Array[1]
 options: F
 __proto__: Object
   canvasContext: null
   checkResponse: function (){
   constructor: function (){
   display: function (){
   file: null
   initialize: function (){
   keyword_list: Array[0]
   log: function (){
   options: Object
   __proto__: Object

Я думал, может быть, он будет вызывать дисплей как расширенный с proto ? Но, похоже, нет. this.imgs [this.gameType] является классом ImageContainer. getUniqueImage выглядит так:

// gets a random image from the imgsShown array, then removes it
// so that subsequent calls to getUniqueImage will always
// be unique.  Refills imgsShown if empty.
getUniqueImage: function() {

  // copy over the img array if imgsShown array is empty
  if(this.imgsShown.length == 0) this.imgsShown = this.imgs.slice(0);
  var rand = Math.floor(Math.random() * this.imgsShown.length);

  return this.imgsShown.splice(rand,1);
}

Вся картинка здесь (разрывается при нажатии животных):

http://www.clumsyfingers.net/projects/game/revealer/

самые важные файлы находятся в каталоге / apps, который я оставил открытым

http://www.clumsyfingers.net/projects/game/revealer/app/

Halp

1 Ответ

1 голос
/ 17 марта 2011

var img = imgLib.getUniqueImage();

Является ли imgLib коллекцией массивов / html?если так, img - это объект?

img.display(this.gameObjects['imageHolder']);

Вы создаете прототип Object?Это не очень хорошая идея , если бы вы были.Я предлагаю вам рефакторинг, выполнив метод класса displayImage и просто вызовите его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...