如何在相关事件后获取特定 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);
});
}
// 笨拙
我不确定我的标题是否清楚,但让我们看一下。
我在 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);
});
}
// 笨拙