0

Скажет, я хочу иметь некоторые «глобал» (изображали с ?), где я могу хранить, а затем получить доступ к следующим функциям:Где я должен хранить итераторы mynderscore.js?

?.parseInt = function (str) { return parseInt(str, 10); }; 
?.selected = function (x) { return x.selected; }; 

Использование было бы, например, для использования с map или filter где-нибудь еще:

var intArray = _.map(stringArray, ?.parseInt); 
var selection = _.filter(myObjsHavingSelectedAttribute, ?.selected); 

Что я должен положить вместо ??

+0

Примечание: Я использую Angular.js, но меня также интересует общая простая JS или даже идея jQuery. – TWiStErRob

ответ

2

Возможные варианты: создать собственный объект пространства имен или использовать существующий объект пространства имен.

Создание собственного пространства имен в равнинных JS будет выглядеть следующим образом:

var myNamespace = myNamespace || {}; 
myNamespace.parseInt = function (str) { return parseInt(str, 10); }; 
myNamespace.selected = function (x) { return x.selected; }; 

Использование существующего пространства имен, как в пространстве имен подчеркивание будет выглядеть следующим образом:

_.parseInt = function (str) { return parseInt(str, 10); }; 
_.selected = function (x) { return x.selected; }; 

Или, характерные для подчеркивания, вы может сделать его доступным на верхнем уровне пространства имен подчеркивания, а также на объектах обертки подчеркивания, например:

Использование пространства имен JQuery будет выглядеть следующим образом:

$.parseInt = function (str) { return parseInt(str, 10); }; 
$.selected = function (x) { return x.selected; }; 
+1

Вы обычно используете ['_.mixin'] (http://underscorejs.org/#mixin), чтобы добавить вещи в Underscore, чтобы убедиться, что все' _.f (x) ',' _ (x) .f() ', и цепочки работают правильно. Наверное, здесь неважно, но хорошие привычки - хорошие привычки. –

+0

@muistooshort - добавлена ​​опция '_.mixin()'. – jfriend00

+0

Действительно ли это хорошая идея «загрязнять» пространство имен '_' этими методами? Что вы думаете об использовании '_.mixin ({myNamespace: {parseInt: ..., selected: ...}});'? (если он вообще работает ?!) – TWiStErRob

1

Вы действительно можете поместить их в любом месте вы хотите.

Если я правильно понял ваш вопрос, ваши проблемы в основном касаются использования пространства имен.

  1. Потеря их при их перезаписи. Это легко управлять небольшим проектом, но если у вас много программистов, и все любят использовать zzz в качестве глобального объекта, то чьи-то функции будут перезаписаны.

    код код

    zzz = { 
        makeWorldPeace : function() { 
        // TODO: implement this 
        }  
    }; 
    

    вашего друга

    zzz = { 
        makePizza : function() { 
        // ... 
        } 
    }; 
    

    Если вы пытаетесь вызвать вашу функцию zzz.makeWorldPeace() вы получите TypeError, что говорит Object has no method makeWorldPeace.

  2. Наличие у них переписанного аналогичным кодом. же пример, как и раньше, но на этот раз код вашего друга это

    zzz = { 
        makeWorldPeace: function() { 
        killAllHumans() 
        } 
    }; 
    

    Это не может быть ваш первоначальный замысел.

Существует много шаблонов пространства имен в JavaScript. Большинство людей пытаются сделать следующее, чтобы избежать конфликтов.

  1. Выберите хорошее имя для вашего корневого объекта. _utils, JSHelpers, независимо от того, что будет уникальным в вашем проекте.
  2. Хорошо управляйте областью переменных, всегда используя var.
  3. Если вы хотите быть хорошим и внимательным, убедитесь, что у вас нет утечек памяти, или вы используете большие куски кода с другими большими кусками кода, оберните вещи в функцию самопроизвольного, как это

    (function(export){ 
        var intermediateFunction = function(){}; 
        var zzz = { /* all the things */ }; 
        export.zzz = zzz; 
    })(window) 
    
    console.log(intermediateFunction); // outputs: undefined 
    

Надежда, что помогает.

+2

Убедитесь, что вы используете 'var' внутри этого IIFE, иначе он не будет иметь описанного эффекта. – Dennis

+0

Упс, хороший глаз. Благодарю. Обновлено. – fet

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