2015-03-09 3 views
-1
  • Я пытаюсь поддержать как взломать хранилище интервью ....

https://github.com/gaylemcd/ctci/tree/master/javascript/lib/data-structuresмерзавец Javascript хранилище с НПМ пакетов

  • я пытаюсь взломать интервью для Js позиции ...
  • они используют mocha и chai npms
  • , поэтому я пытаюсь зафиксировать код в js ...
  • я заглянул в один из примеров ...
  • не знаю, почему они используют эту линию ... Вы можете сказать мне, почему они с помощью

module.exports

module.exports = Strings = (function() { 
    var _isSubstring = function(str1, str2) { 
    return str1.indexOf(str2) != -1 
    } 
    var _sameLengthAndNotBlank = function(str1, str2) { 
    var len = str1.length; 
    return len === str2.length && len > 0 
    } 
    return { 
    isRotation: function(str1, str2) { 
     if(!_sameLengthAndNotBlank(str1, str2)) return false; 
     if(_isSubstring(str1+str1, str2)) return true; 
    } 
    } 
}()); 

ответ

0

Узел использует модульную систему под названием CommonJS. Каждый файл в этих примерах является одним модулем. Любой из этих модулей может быть включен в другой скрипт с помощью функции require().

var Strings = require('./path/to/1_8.js'); 

module.exports определяет, что получает возвращается, когда вам требуется определенный файл. В этом случае он возвращает объект Strings.

В данном конкретном примере объект Strings присваивается IIFE, который возвращает объект с помощью метода isRotation. Таким образом, чтобы использовать эту функцию вы могли бы сделать:

var Strings = require('./path/to/1_8.js'); 
Strings.isRotation('foo', 'foobar'); 

Как правило, при использовании CommonJS, нет необходимости IIFE конструкций. Я подозреваю, что автор пытается упростить UMD (Universal Module Definition). Если используется в браузере вместо nodejs, объект Strings станет глобальным (поскольку он не имеет объявления var). Однако в браузере module будет неопределенным, что приведет к ошибке. Это кажется бессмысленным. Есть также некоторые проблемы, в том числе отсутствующие точки с запятой.

Вот как я бы написать этот модуль:

function isSubstring(str1, str2) { 
    return str1.indexOf(str2) !== -1; 
} 

function sameLengthAndNotBlank(str1, str2) { 
    var len = str1.length; 
    return len === str2.length && len > 0; 
} 

module.exports = { 
    isRotation: function(str1, str2) { 
    if(!sameLengthAndNotBlank(str1, str2)) { 
     return false; 
    } 

    if(isSubstring(str1 + str1, str2)) { 
     return true; 
    } 
    } 
}; 

Чтобы запустить этот модуль, вам нужно иметь Node.js установлен. Затем просто клонируйте репозиторий и следуйте instructions для запуска тестов.

git clone https://github.com/gaylemcd/ctci.git 
cd ctci/javascript 
npm install 
npm install -g mocha 
mocha --recursive 

Если вы хотите, чтобы требовать их самостоятельно, просто требуется создать свой собственный файла JavaScript в CTCI/JavaScript:

//ctci/javascript/string-example.js 
var Strings = require('./lib/data-structures/chapter-1/1_8.js'); 
console.log(Strings.isRotation('foo', 'foobar')); 

Затем запустите его с узлом:

node string-example.js 
+0

спасибо за ответ ... можете ли вы рассказать мне в своем локальном, что и все, что мне нужно для установки для выполнения кода ... –

+0

Вам нужно исследовать nodejs. Я отредактировал свой ответ, чтобы добавить некоторые основные инструкции. –

+0

Можете ли вы рассказать мне, как выполнить и посмотреть –

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