如何在相关事件后获取特定 object 的属性?

How do I get specific object's attributes after a related event?

我不确定我的标题是否清楚,但让我们看一下。

我在 ul 列表中有 2 个 li 元素,我希望在单击 li 时获取 li 的文本,然后基于 phones 变量创建一个 object。

示例:当我点击 NEXUS 时,在我的控制台中得到一个 Phone object 属性:

models: ['5', '6', '5X', '6P'];

不幸的是,我知道我无法将构造函数名称传递给函数 setConstructor() 的 return。我尝试用 {}() 编写 "modelname",但代码根本没有执行。

我该怎么做?

var phones = {
    NEXUS: {
        name: 'Nexus',
        models: ['5', '6', '5X', '6P']
    },
    IPHONE: {
        name: 'iPhone',
        models: ['5', '5S', '6', '6S']
    }
};

var lastConstructorClicked = {};
var output = {};

function Phone(constructorModels) {
    this.models = constructorModels;
    this.getModels = function () {
        return this.models;
    };
}

function setConstructor(modelname) {
 return phones.modelname.models;   
}

$("a[id^='show-models-']").click(function() {
    lastConstructorClicked = $(this).text();
    console.log(lastConstructorClicked);
 output = new Phone(setConstructor(lastConstructorClicked));
});

console.log(output);
<ul class="dropdown-menu">
    <li><a href="#" id="show-models-iphone">IPHONE</a></li>
    <li><a href="#" id="show-models-nexus">NEXUS</a></li>
</ul>

phones.modelname.models 将查找 实际命名为 modelname 的成员,而不是该变量命名的成员。你想要:

phones[modelname].models

var phones = {
  NEXUS: {
    name: 'Nexus',
    models: ['5', '6', '5X', '6P']
  },
  IPHONE: {
    name: 'iPhone',
    models: ['5', '5S', '6', '6S']
  }
};

var lastConstructorClicked = "";
var output = {};

function Phone(constructorModels) {
  this.models = constructorModels;
  this.getModels = function() {
    return this.models;
  };
}

function setConstructor(modelname) {
  return phones[modelname].models;
}

$("a[id^='show-models-']").click(function(e) {
  e.preventDefault();

  lastConstructorClicked = $(this).text();
  console.log(lastConstructorClicked);
  output = new Phone(setConstructor(lastConstructorClicked));
  console.log(output);
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

<ul class="dropdown-menu">
  <li><a href="#" id="show-models-iphone">IPHONE</a>
  </li>
  <li><a href="#" id="show-models-nexus">NEXUS</a>
  </li>
</ul>

使用括号表示法访问对象

window.onload = function(){


var phones = {
    NEXUS: {
        name: 'Nexus',
        models: ['5', '6', '5X', '6P']
    },
    IPHONE: {
        name: 'iPhone',
        models: ['5', '5S', '6', '6S']
    }
};

var lastConstructorClicked = {};
var output = {};



$("a[id^='show-models-']").click(function() {
    lastConstructorClicked = $(this).text();
    console.log(lastConstructorClicked);

  var   output = phones[lastConstructorClicked].models;

  console.log(output);
});



}

// 笨拙

http://plnkr.co/edit/SMovCH8s67YfLmMCWYEO?p=preview