JavaScript: Как объединить две разные, но довольно похожие функции? - PullRequest
0 голосов
/ 30 августа 2018

Внутри этих двух функций;

  • url путь меняется.
  • Зависит от другого url пути; функция parameters - это изменения.

Я пробовал несколько имен и использований, чтобы объединить эти функции, но не смог добиться успеха! Как я могу использовать только функцию? Заранее спасибо.

function RunTestCases (name, foo, folder, host) {
    host = host || DynamicHost();
    folder = folder || 'FooFolderPath';

    return {
        title: name,
        hostPageUrl: host,
        url: folder + foo + '/'+ name +'.T.js'
    };
}

function RunMonkeyTestCase (name, folder, host) {
    host = host || DynamicHost();
    folder = folder || 'FooFolderPath';

    return {
        title: name,
        hostPageUrl: host,
        url: folder + name +'.T.js'
    };
}

//Usage of Functions;
RunTestCases('NameParam', 'FooParam');
RunMonkeyTestCase('NameParam', 'BarFolderPath', 'BarHostParam');

//For some specific usages.
RunTestCases('NameParam', 'FooParam', 'BarFolderPath', 'BarHostParam');
RunMonkeyTestCase('NameParam', null, 'FooHostParam');

Ответы [ 4 ]

0 голосов
/ 30 августа 2018
function RunTest (name, folder, host, foo) {
    host = host || (foo ? DynamicHost() : 'FooHostParam');
    folder = folder || 'FooFolderPath';

    returnVal = {
        title: name,
        hostPageUrl: host,
    };

    returnVal.url = foo ? folder + name +'.T.js' : folder + foo + '/'+ name +'.T.js';

    return returnVal;
}
0 голосов
/ 30 августа 2018

Сохраните порядок параметров в обеих функциях, а затем добавьте foo в параметр и затем сделайте что-то вроде ниже:

function TestCase(name, folder, host, foo) {
  host = host || DynamicHost();
  folder = folder || 'FooFolderPath';
  let url;
  if (foo) {
    url = folder + foo + '/' + name + '.T.js';
  } else {
    url = folder + name + '.T.js'
  }

  return {
    title: name,
    hostPageUrl: host,
    url: url
  };

}

console.log(TestCase('NameParam', 'BarFolderPath', 'BarHostParam', 'FooParam'));

console.log(TestCase('NameParam', 'BarFolderPath', 'BarHostParam'));

console.log(TestCase('NameParam', 'FooParam', 'BarFolderPath', 'BarHostParam'));

console.log(TestCase('NameParam', 'FooHostParam'));
0 голосов
/ 30 августа 2018

Похоже, что параметр foo является выделенным. Я бы использовал это, но вам нужно изменить порядок параметров:

function RunTestCases (name, folder, host,foo) 
  {
  host = host || (foo? 'FooHostParam' : DynamicHost()) ;
  folder = folder || foo? 'FooFolderPath' : 'BarFolderPath')
  const url = (foo? (folder + foo + '/' + name +'.T.js') : (folder + name +'.T.js'));
  return {
      title: name,
      hostPageUrl: host,
     url
  };
}
0 голосов
/ 30 августа 2018

Вам нужно объединить функции в одну? Попробуй.

function Test (title, foo, folder = 'FooFolderPath', hostPageUrl = DynamicHost()) {
  return {
    title,
    hostPageUrl,
    url: folder + (foo ? foo + '/' : '') + title + '.T.js'
  };
}

//Usage of Functions;
Test('NameParam', 'FooParam')
Test('NameParam', null, 'BarFolderPath', 'BarHostParam')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...