2016-03-11 8 views
2

Я использую require.js организовать мои ЯШ:Javascript - вызов нового на неопределенный объект

define([ 
    'underscore', 
    'sylvester', 
    'glUtils', 
    'GLFacade', 
    'Item', 
    'Attribute', 
    'Buffer', 
], function(
    _, 
    sylv, 
    glUtils, 
    GLFacade, 
    Item, 
    Attribute, 
    Buffer 
) { 
    "use strict"; 
    function Sprite() { this.init.apply(this, arguments); } 

    _.extend(Sprite.prototype, { 
     init: function(prog, img, viewPort) { 
     this._frameNum = 0; 
     this._framesPerAnimation = 4; 
     this._prog = prog; 
     this._viewPort = viewPort; 
     this._img = new ImageWrapper(img); 

     //...other initialization stuff... 
     }, 

     //...other methods... 

    }); 

    return Sprite; 

}); 

, но я постоянно впадать в ошибку, что я забыл добавить модуль в верхней части файла. Выше я забыл добавить ImageWrapper к моим зависимостям. Когда я это делаю, мой код бесшумно выходит из строя без сообщений об ошибках, хотя ImageWrapper - undefined. Если я попытаюсь войти в систему console.log(ImageWrapper), я действительно получаю сообщение об ошибке.

Почему конструктор не звонит new ImageWrapper(img) с ошибкой? И есть ли что-то похожее на "use strict;", что я могу использовать для увеличения информации об ошибках во время разработки?

ответ

1

Можно нибудь вкусненькое код с помощью инструмента, как http://jshint.com/ - вы получите что-то вроде:

One undefined variable 
27 ImageWrapper 

В зависимости от вашей установки существуют различные способы автоматизации этого, некоторые редакторы построили это или плагины могут расширить это функциональность. Также есть версия командной строки на npm, если вы хотите запустить jshint вручную: https://npmjs.org/package/jshint

Ваш код должен вызывать ошибку, но только если вы создаете экземпляр new Sprite.

Когда я пытаюсь упростить код, как этот

define('Sprite', ['underscore'], function(_) { 
    'use strict'; 

    function Sprite() { 
    this.init.apply(this, arguments); 
    } 

    _.extend(Sprite.prototype, { 
    init: function() { 
     this._foo = new DoesntExist(); 
    } 
    }); 

    return Sprite; 
}); 

require(['Sprite'], function(Sprite) { 
    var sprite = new Sprite(); 
}); 

он бросает ReferenceError, как и ожидалось.

+0

Спасибо, я посмотрю, смогу ли я это сделать. Странно, что я не получаю никаких ошибок, даже когда создаю «новый спрайт». – xdhmoore

+1

Можете ли вы попытаться запустить мою упрощенную версию и посмотреть, вызывает ли она ошибку? Возможно, у меня что-то не так, потому что я никогда раньше не использовал requirejs. – user3173842

+0

Спасибо за помощь. Ваш пример помог мне найти проблему. Проблема заключалась в том, что весь мой код встречается внутри функции 'onFulfilled' [Q.spread] (https://github.com/kriskowal/q/wiki/API-Reference#promisespreadonfulfilled-onrejected), и я не определял обработчик ошибок. Я добавил '.catch()' в конце и исправил его. Это была ошибка, но Q просто проглотил ее. – xdhmoore

Смежные вопросы