如何在这两个功能之间共享参数?

时间:2019-03-01 17:58:05

标签: javascript variables data-structures parameters prototype

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 // method2的结果

如果method2有自己的参数:

  

这是参数Orange // method1的结果
  这是另一个参数Blue // method2的结果

我尝试了几种方法来获取各种线索,但根本没有进展。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:1)

这是如何使用课程完成的

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>

答案 1 :(得分:1)

您可以使用if语句轻松获得想要的 。如果未传递任何参数,则可以使用logical OR提供后备。后备将是this.param,它在调用任一方法时设置,因此另一个仍将使用相同的值。 / p>

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 值提供后备功能。因此,如果您有意传递nullundefined""(空字符串)或0,则会得到后备。