Как бы я поделить параметры между этими двумя функциями? - PullRequest
0 голосов
/ 01 марта 2019

const a = {
  method1: function(param) {
    this.param = param;
    $('span[data-count]').text('This is a parameter ' + param);
  },
  test: 10
}
var b = Object.create(a);
b.method2 = function(param) {
  this.param = param;
  $('.span2[data-count]').text('This is an another parameter ' + b.param);
}

b.method1('Orange');
b.method2('Blue');
    <span data-count></span><br>
    <span data-count class="span2"></span>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">https://stackoverflow.com/questions/ask#</script>

CodePen

У меня есть объект с именем a, который является прототипом другого объекта с именем b.Когда они будут выполнены, в каждом результате будут отображаться различные теги span и .span2.

Моя цель - использовать method1's parameter для method2 без оператора if ,Я хотел бы предположить method1's parameter на экране, если method2 не имеет параметров.Таким образом, результат будет выглядеть так:

Это параметр Orange // метод method1
Это еще один параметр Orange // метод method

If method2 имеет свой собственный параметр:

Это параметр Orange // результат method1
Это еще один параметр Blue // Результат method2

Я пробовалнесколько способов получить какие-либо подсказки, но никакого прогресса нет.

Есть ли способы сделать это?

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Вы можете легко получить то, что вы хотите без , используя if заявления.Вы можете использовать логическое ИЛИ , чтобы обеспечить откат, если ни один параметр не был передан. Откат будет иметь значение this.param, которое устанавливается при вызове любого метода, поэтому другой будет по-прежнему использовать то же значение.

const a = {
  method1: function(param) {
    param = param || this.param; //provide a fallback if `param` is falsey
    this.param = param;
    $('span[data-count]').text('This is a parameter ' + param);
  },
  test: 10
}
var b = Object.create(a);
b.method2 = function(param) {
  param = param || this.param; //provide a fallback if `param` is falsey
  this.param = param;
  $('.span2[data-count]').text('This is an another parameter ' + b.param);
}

b.method1('Orange');
b.method2(); //nothing passed in
<span data-count></span><br>
    <span data-count class="span2"></span>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js">https://stackoverflow.com/questions/ask#</script>

Обратите внимание, что это обеспечит запасной вариант для любого значения falsey .Поэтому, если вы хотите преднамеренно передать null, undefined, "" (пустая строка) или 0, вы получите запасной вариант.

0 голосов
/ 01 марта 2019

Вот как это можно сделать с помощью класса

const foo = new class {
  method1(param) {
    $(`span[data-count]`).text(`This is a parameter ${this.param = param}`)
  }
  
  method2(param = this.param) {
    $(`.span2[data-count]`).text(`This is an another parameter ${this.param = param}`)
  }
}

foo.method1('Orange');
foo.method2();
<span data-count></span><br>
<span data-count class="span2"></span>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

И поэтому, используя ваш подход, мы присваиваем method2 значение по умолчанию this.param

const a = {
  method1: function(param) {
    this.param = param;
    $('span[data-count]').text('This is a parameter ' + param);
  },
  test: 10
}

var b = Object.create(a);
b.method2 = function(param = this.param) {
  this.param = param;
  $('.span2[data-count]').text('This is an another parameter ' + b.param);
}

b.method1('Orange');
b.method2();
<span data-count></span><br>
<span data-count class="span2"></span>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
...