Javascript:如何通过它的参数选择函数内部属性

时间:2015-01-23 15:48:56

标签: javascript

我有一个创建菜单的功能,它有一些分配给它的按钮并接受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" });

然而,我觉得应该有一个更清洁,更简洁的方法来做到这一点。

你的建议是什么?

2 个答案:

答案 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