由于变量范围,requirejs丢失了原型?

时间:2013-10-22 18:00:41

标签: javascript scope prototype require

我试图开发(重写)小型国际象棋引擎(平板电脑或远程游戏中的2名玩家)

因为当种植可用类型的nubzer时,属性和bahaviour会逐渐出现在系统上:我在制作一些中间模块之间

  • 基本的:阵营,代数参考,windrose

  • 中级:西洋棋棋子,棋盘,瓷砖

  • 全球性的:游戏

我使用require.js来定义我的模块,我有很多对象交叉引用,所以我构建了一个池(事务管理器)来保持依赖关系图之间的关系。

当试图将一个对象的原型放在它定义的模块之外时,问题出现了,如下所示:

// file: js/app/chess/board.js
define("chess/algebr", function(algebr) {
    var Board = function(id) {
        this.id = id;
    }

    // other stuff ...

    return {
        create : function() { return new Board(); }
    }
});

// file js/app/colorchess.js
define("core/pool", "chess/board", "chess/tile", function(pool, board, tile) {
    // some other stuff...

    var board = board.create();

    console.log(board.prototype); // --> undefined

});

那么,有什么不对? 董事会原型何去何从? 这是模块之间的范围界定的故事吗?

问候。

1 个答案:

答案 0 :(得分:0)

这与require.js无关。

prototype只是您错误地尝试访问的属性,将其与 prototype setter混淆:

var Board = function(id) {
    this.id = id;
};

Board.prototype.test = function () {return 42;}

console.log( (new Board()).prototype );

http://jsfiddle.net/Gtb2L/

与:比较:

console.log( (new Board()).__proto__ ); // works in fresh browsers like Chrome 30, IE11

在此看到对内部原型的引用