【问题标题】:How to access objects without using if then or case swtich [javascript]如何在不使用 if then 或 case switch [javascript] 的情况下访问对象
【发布时间】:2018-08-12 20:24:06
【问题描述】:

所以我创建了一个这样的对象原型:

function myObjProto(one, two, three) {
    this.one = one;
    this.two = two;
    this.three = three;  };

然后像这样创建了一堆对象:

let myObj1 = new myObjProto (
    /* one */ "one", 
    /* two */ "two", 
    /* three */ "three" );
let myObj2 = new myObjProto (
    /* one */ "one", 
    /* two */ "two", 
    /* three */ "three" );

我有一个正在改变的变量(myObj1、myObj2 等),我知道访问这些值的一种方法是说

let myVar = "myObj";

let var1;
let var2;
let var3;

if (myVar == myObj1){
    var1 = myObj1.one;
    var2 = myObj1.two;
    var3 = myObj1.three;
}
else {
    var1 = myObj2.one;
    var2 = myObj2.two;
    var3 = myObj3.three;
}

但必须有更好的方法。我有 7 个对象!

我尝试过这样的事情:

var1 = myVar.one;
var2 = myVar.two;
var3 = myVar.three;

但我得到的只是“未定义”。请帮忙。

(完整示例为here on JSbin)

【问题讨论】:

  • 你在找myVar instanceof myObj1吗?另一方面,如果属性相同,则无需执行 ifs,因为您似乎访问了对象的相同变量名
  • 你的jsbin链接错误

标签: javascript object javascript-objects


【解决方案1】:

您可以为所有类型获取一个对象,并将类型作为property accessor 带括号。

var Dwarf = new race(),
    Elf = new race(),
    Gnome = new race(),
    HalfElf = new race(),
    HalfOrc = new race(),
    Halfling = new race(),
    Human = new race(),
    types = { Dwarf, Elf, Gnome, HalfElf, HalfOrc, Halfling, Human },
    type = 'Halfling';


// access:
types[type].language

【讨论】:

  • 谢谢!这帮助很大。
【解决方案2】:

可以使用对象解构,但变量需要匹配

const {one, two, three} = myVar == myObj1 ? myObj1 : myObj2;

现在一、二、三将是正确对象的值

【讨论】:

  • 您能详细说明一下吗?
  • 三元运算符的使用本质上是一个if,只是简写,Nina给出了一个非常好的答案。您提供的代码可能是单行代码,但这并不能使 OP 更容易阅读
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-04
  • 2015-03-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多