我可以有条件地将属性传递给对象吗?

问题描述 投票:0回答:3

是否可以有条件地将属性传递到基于对象的函数中:

myFunction
      .x()
      .y()
      .x();

在这里,我只想根据条件传入

y()
,例如:

myFunction
      .x()
      [isTrue && y()]
      .x();

非常感谢任何帮助,谢谢🙂

javascript ecmascript-6
3个回答
3
投票

如果您想动态地在不同的方法之间进行选择,您可以使用该语法。但当条件为假时,没有“什么都不做”的方法可以替代

y

请改用

if
语句。

let temp = myFunction.x();
if (isTrue) {
    temp = temp.y();
}
temp.x()

2
投票

这是另一个更类似于您最初想象的解决方案。 巴马尔的解决方案工作得很好,但我想我会展示一种更像你想象的不同方法:

obj
  .x()
  [doIt ? "y" : "noop"]()
  .x();

在此方案中,

doIt
是任何布尔值或布尔表达式,
.noop()
是对象上的“不执行任何操作”方法。

而且,这是一个可以在片段中运行的工作示例:

const obj = {
    x() {
        console.log("executing x() method");
        return this;
    },
    y() {
        console.log("executing y() method");
        return this;
    },
    noop() {
        console.log("executing noop() method");
        return this;
    }
}

// try both values of the boolean
for (let doIt of [true, false]) {
    console.log(`\nresults for doIt = ${doIt}`);
    obj
        .x()
        [doIt ? "y" : "noop"]()
        .x();
}


0
投票

基于@jfriend00的想法,但使用对象的内置方法valueOf,它已经返回this,并且不关心给定的参数。因此,如果您的条件方法需要参数,您可以安全地传递它们(尽管与通常的条件函数调用不同,这些参数将始终被评估!)。所以你可以使用:

myFunction
    .x()
    [isTrue? "y" : "valueOf"]()
    .x();
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.