2016-03-12 1 views
0

Я только что начал экспериментировать с RequireJS и хотел бы знать, является ли способ загрузки этого словаря/определений скриптом (называемый def/polygons.js) с наиболее удобным/эффективным или не.RequireJS: загрузка скрипта словаря или определений

Он работает, я могу создать экземпляр «Drawer» и иметь доступ к «многоугольникам», но этот переменная ДУМАЕТ является глобальным, и я не считаю, что это может быть лучшей практикой ... любая помощь «» многоугольников буду оценен :)

файла где требуется 'Защиты/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    
     }] 
    } 

}); 

ответ

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 объект не помещается в глобальную область видимости, так что не волнуйтесь, оно содержится в пределах конкретного модуля (ей), что вы называете его в.

+1

Спасибо, Ник, в этом случае я буду использовать эту практику с этого момента;) –

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