我有一个创建菜单的功能,它有一些分配给它的按钮并接受args
参数。该函数的一部分是一个名为setActiveButton
的方法。当我创建菜单时,我想通过传递选项args
来指示哪些按钮处于活动状态。
例如:
var createMenu = function (args) {
this.btnOne = new Button(); // construct a button
this.btnTwo = new Button();
this.btnTwo = new Button()
this.setActiveButton(args.desiredButton);
return this;
}
createMenu({ desiredButton: btnTwo });
如何告诉createMenu
通过args
使用其中一个按钮?我无法通过{ desiredButton: this.btnTwo }
- 因为此时this.btnTwo
未定义。
我正在考虑传入一个字符串然后使用这样的条件语句:
var createMenu = function (args) {
var buttonChoice;
this.btnOne = new Button();
this.btnTwo = new Button();
this.btnThree = new Button();
if (args.desiredButton === "button one") {
this.setActiveButton(this.btnOne);
}
if (args.desiredButton === "button two") {
this.setActiveButton(this.btnTwo);
}
if (args.desiredButton === "button three") {
this.setActiveButton(this.btnThree);
}
return this;
}
createMenu({ desiredButton: "button two" });
然而,我觉得应该有一个更清洁,更简洁的方法来做到这一点。
你的建议是什么?
答案 0 :(得分:1)
我有点不清楚你为什么要返回一个没有值的属性对象,但是你可以这样做。在我的示例中,我将属性设置为等于'按钮1','按钮2'等字符串:
// pass number of total buttons, index of active button
var createMenu = function (total, active) {
var obj = {};
for (var i = 0; i < total; i++) {
obj['btn'+(i+1)] = 'button '+(i+1);
}
setActiveButton(obj['btn'+active]);
return obj;
}
在您的示例中,您引用setActiveButton
作为函数的属性但未定义,因此我将其作为单独的函数引用。
答案 1 :(得分:1)
只需将按钮名称作为字符串传递,然后使用括号进行访问。
var createMenu = function (args) {
this.btnOne = new Button(); // construct a button
this.btnTwo = new Button();
this.btnTwo = new Button()
this.setActiveButton(this[args.desiredButton]); // access this[property]
return this;
}
createMenu({ desiredButton: 'btnTwo' }); // string name of property