我正在尝试做以下事情以满足代码生成器的要求(具体来说是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
};
}