我正在尝试执行以下操作以满足代码构建器的要求(具体来说是Sencha Cmd)。
这是我需要做的本质。关键因素是函数体必须以返回对象文字结束。由于生成器中的限制,我无法返回变量。那么,如果参数includeB为true,如何在下面的伪代码点添加属性“b”,但如果为false,则根本不添加属性。不允许ie b==未定义或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'
感谢阅读和考虑,
默里
您不能将布尔逻辑放入javascript文字定义中。因此,如果您的构建器要求返回的对象只能定义为javascript文字,那么您不能以这种方式有条件地定义属性。
如果您可以在函数中创建一个对象,使用逻辑修改该对象,然后返回该对象,那么这很容易。
function create(includeB) {
var x = {
a: 1
};
if (includeB) {
x.b = 2;
}
return x;
}
您的另一个选择是包装创建函数并在创建函数之外执行。
function myCreate(includeB) {
var x = create(includeB)
if (includeB) {
x.b = 2;
}
return x;
}
或者,您甚至可以透明地包装create函数,以便调用者仍然使用create()
,但它的行为已被更改。
var oldCreate = create;
create = function(includeB) {
var x = oldCreate(includeB);
if (includeB) {
x.b = 2;
}
return x;
}
您几乎已经展示了构造函数的用例,而不是使用对象文字:
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
};
}
如果可以使用ES6,请使用排列属性。
function create(includeB) {
return {
a : 1,
...(includeB ? { b: 2 } : {}),
};
}
我想有条件地向对象添加一个属性。目前我有这个: 问题是如果汽车。电池不存在我有电池:未定义。如果对象中不存在该属性,我宁愿不要该属性。我怎样才能做到这一点?
我想创建一个有条件添加成员的对象。简单的方法是: 现在,我想写一段更地道的代码。我正在尝试: 但是现在,
问题内容: 如果满足特定条件,是否有办法仅向React组件添加属性? 我应该在渲染后基于Ajax调用将required和readOnly属性添加到表单元素中,但是由于readOnly =“ false”与完全省略该属性不同,因此我看不到如何解决此问题。 下面的示例应解释我想要的内容,但将无法正常工作(解析错误:意外的标识符)。 问题答案: 显然,对于某些属性,如果您传递给它的值不真实,React足
问题内容: 我想创建一个有条件添加成员的对象。简单的方法是: 现在,我想编写一个更惯用的代码。我在尝试: 但是,现在是,其值为的成员。这不是期望的结果。 有方便的解决方案吗? 更新资料 我寻求一个可以解决几个成员的一般情况的解决方案。 问题答案: 在纯Javascript中,我想不出比您的第一个代码片段更惯用的东西。 但是,如果不是不可能使用jQuery库,那么$.extend()应该符合您的要求
问题内容: STORE = { item : function() { } }; STORE.item.prototype.add = function() { alert(‘test 123’); }; STORE.item.add(); 一段时间以来,我一直在试图找出问题所在。为什么不起作用?但是,当我使用以下命令时,它可以工作: 问题答案: 原型对象应在构造函数上使用,基本上是将使用new运
问题内容: 这件事困扰了我一段时间。我为什么不能做: …虽然我可以执行以下操作? 这是什么规则?您能给我介绍一下吗? 问题答案: 您可以向具有的任何对象添加属性。 例如,没有它。 字符串和其他简单的内置对象也没有它。 使用类也没有它。 除非前面的声明适用,否则用定义的类都具有它。 如果使用/的对象没有/ ,通常是为了节省空间。例如,如果有一个命令,那就太过分了- 想象一下一个非常短的字符串的膨胀程