我正在尝试做以下事情以满足代码生成器的要求(具体来说是Sencha Cmd)。

这就是我需要做的本质。关键因素是函数体必须以对象文字的返回结尾。由于构建器中的限制,我无法返回变量。因此,如果参数'includeB'为true,如何在下面的伪代码处添加属性'b',但如果为false,则不添加属性ALL。即b == undefined或b == null不允许。

也许是不可能的。

function create(includeB) {
        // Can have code here but the final thing MUST be a return of the literal.
        // ...
    return {
        a : 1
        // pseudo code:
        // if (includeB==true) then create a property called b
        // and assign a value of 2 to it.
        // Must be done right here within this object literal
    }
}

var obj = create(false);
// obj must have property 'a' ONLY

var obj = create(true);
// obj must have properties 'a' and 'b'

感谢您的阅读和考虑,

默里

最佳答案

您已经展示了构造函数的用例,而不是使用对象文字:

function CustomObject(includeB) {
    this.a = 1;
    if (includeB) {
        this.b = 2;
    }
}

//has `a` only
var obj1 = new CustomObject(false);

//has `a` and `b`
var obj2 = new CustomObject(true);

重新阅读您的问题后,看来您在修改该功能上的访问权限有限。如果我正确理解了您的问题,则只能更改脚本的有限部分:
function create(includeB) {
    // modifications may be done here

    // the rest may not change
    return {
        a : 1
    }
}

var obj = create(false);
// obj must have property 'a' ONLY

var obj = create(true);
// obj must have properties 'a' and 'b'

如果是这种情况,那么您可以简单地跳过该函数的后面部分:
function create(includeB) {
    if (includeB) {
        return {
            a: 1,
            b: 2
        };
    }
    return {
        a: 1
    };
}

10-08 12:02