В вашем примере вы объявляете PointerTool
как функцию в глобальной области видимости.Предполагая, что ваш javascript работает в браузере, «глобальная область» фактически такая же, как у объекта window
.Это означает, что если у вас есть конструктор:
function PointerTool() {
...
}
, это то же самое, что и это:
window.PointerTool = function() {
...
}
Итак, теперь в вашей функции getTool вы можете получить доступ к своим функциям конструктора, например так:
function getTool(name){
return new window[name]();
}
Более "перспективным" способом для этого будет определение собственного объекта пространства имен, в который вы поместите все свои различные конструкторы инструментов.Примерно так («myproject» будет кратким названием вашего проекта или системы):
var myproject = { tools: {} };
// Pointer Tool Constructor
myproject.tools.PointerTool = function() {
...
}
// Line Tool Constructor
myproject.tools.LineTool = function() {
...
}
// and so on
Тогда ваша функция getTool будет выглядеть так:
function getTool(name){
return new myproject.tools[name]();
}
Этот подход сохраняет вашиматериал, изолированный от всего, что случается, определяется в глобальной области / области видимости.