RequireJS:加载字典或定义脚本

RequireJS: loading a dictionary or definitions script

我刚开始使用 RequireJS 进行实验,想知道我加载此 dictionary/definitions 脚本(称为 def/polygons.js)的方式是否最 convenient/eficient 或不是。

有效,我可以实例化一个 'Drawer' 并可以访问 'polygons' 但是 'polygons' 变量 我认为 是全局的,我不要觉得这可能是最佳实践...任何帮助将不胜感激:)

我需要的文件'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            
        }]
    }

});

I THINK is global and I don't feel this may be the best practice

Require.js 的美妙之处在于它可以帮助您避免污染全局范围。话虽如此,您的 polygons class 绝对不会 被放在全球范围内。

因为你是这样定义的:

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 对象不会被推送到全局范围内,所以不用担心,它包含在您调用的特定模块的范围内它在.