RequireJS:加载字典或定义脚本

时间:2016-03-12 20:01:03

标签: javascript requirejs amd js-amd

我刚刚开始使用RequireJS进行实验,并且想知道我加载这个词典/定义脚本(称为def / polygons.js)的方式是否最方便/最有效。

它有效,我可以实例化一个'抽屉'并且可以访问多边形'但那个多边形'变量我认为是全球性的,我觉得这可能是最好的做法......任何帮助都将受到赞赏:)

我要求的文件' def / polygons.js'

/*
 *      Drawer Class Definition
 *
 *
 **/
define([
    'modules/canvas', 
    'def/polygons'
    ], function(Canvas, polygons) {

    'use strict'

    function Drawer(canvasSettings) {

        if (!this instanceof Drawer) {
            throw new TypeError("Drawer constructor cannot be called as a function.");
        }

        this.canvas = new Canvas(canvasSettings);
        this.polygons = polygons;
    }


    Drawer.prototype = {

        /* Repoint base constructor back to the original constructor function */
        constructor: Drawer,

        do: function() {
            console.log("This is just a test");
            console.log(this.polygons);
        }
    };


    return Drawer;
});

这是我定义多边形字典的脚本:

/*
 *      Polygon Definitions
 *
 *
 **/
define(function() {

    return {        
        name: 'square',
        position: {
            x: 0,
            y: 0
        },
        points: [{
            x: 0,
            y: 0
        },{
            x: 0,
            y: 0
        },{
            x: 0,
            y: 0
        },{
            x: 0,
            y: 0            
        }]
    }

});

1 个答案:

答案 0 :(得分:0)

  

我认为是全球性的,我觉得这可能是最好的做法

Require.js的美丽和力量在于它可以帮助您避免污染全球范围。话虽如此,您的polygons绝对不是被放在全球范围内。

因为你已经这样定义了它:

define(function() {

    return {        
        name: 'square',
        position: {
            x: 0,
            y: 0
        },
        points: [{
            x: 0,
            y: 0
        },{
            x: 0,
            y: 0
        },{
            x: 0,
            y: 0
        },{
            x: 0,
            y: 0            
        }]
    }

});

这个模块只是返回您的多边形对象 - 没有任何东西被推到全局范围。

当你打电话来访问你的脚本时:

define([
    'modules/canvas', 
    'def/polygons'
    ], function(Canvas, polygons) {

    ...

您的polygon对象仅在此模块的特定范围内实例化。

所以尽管如此,你的polygon对象并没有被推到全球范围,所以不要担心,它包含在你要求的特定模块的范围内它在。