Javascript:通过组合先前定义的键在对象上设置键
Javascript: setting a key on the object by combining previously defined keys
我很难描述我的情况,所以如果之前解决了这个问题,请原谅我。
我想通过以下方式定义一个对象:
var foo = [
{
firstName : 'John',
lastName : 'Doe',
fullName : this.firstName + this.lastName
},
// OR
{
firstName : 'Jane',
lastName : 'Doe',
herID : Do-something with the first and last name that were just defined, such as computeCombination(firstName, lastName)
}
]
这种声明可能吗?
我需要一次完成 foo 的声明,在这里,我以后无法对对象进行更改。此外,我不想在这里参与索引,例如使用 foo[0].firstName 等。
我想要这个的主要原因是,我不想再次编写相同的字符串,因为它是多余的并且字符串很长。此外,数组中的每个对象可能对最后一个键具有不同的组合逻辑。
谢谢
可以使用getter。
var foo = [
{
firstName : 'John',
lastName : 'Doe',
get fullName(){ return this.firstName +' '+ this.lastName; }
}]
console.log( foo[0].fullName ); //John Doe
http://jsfiddle.net/6jq8ky0k/1/
你不能像
你显示的那样用"静态"声明来做你要求的事情,因为this
没有在静态声明中设置为对象,所以你不能使用 this
引用对象的其他属性,但如果你想要相同的逻辑来制作 fullName
属性,你可以使用这样的构造函数使用动态声明来做到这一点:
function Person(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.fullName = firstName + " " + this.lastName;
}
var people = [new Person("John", "Doe"), new Person("Jane", "Doe")];
如果希望每个条目都有不同的逻辑,则可以将回调传递到定义要使用的逻辑的 Person()
构造函数中,如下所示:
function Person(firstName, lastName, fn) {
this.firstName = firstName;
this.lastName = lastName;
this.fullName = fn(firstName, lastName);
}
function combine(f, l) { return f + " " + l;}
function makeID(f, l) {return f.slice(0, 1) + l;}
var people = [new Person("John", "Doe", combine), new Person("Jane", "Doe", makeID)];
或者,如果你真的想为其他属性提供不同的东西,那么数组中的所有内容可能不是同一类型的对象,所以当你想要不同的东西时,你可以使用不同的构造函数。 你还没有真正解释你的目标是什么,所以我们不能真正就细节提出建议。 但是,关键是你有很多不同的选项来计算基于原始两个名称的其他属性。 下面是一个具有不同构造函数的示例:
function PersonName(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.fullName = firstName + " " + lastName;
}
function PersonID(firstName, lastName) {
this.firstName = firstName;
this.lastName = lastName;
this.herID = firstName.slice(0, 1) + lastName;
}
var people = [new PersonName("John", "Doe"), new PersonID("Jane", "Doe")];
很多选择。
相关文章:
- 从每个父对象获取attr,并为每个子对象设置attr
- 用javascript为预定义对象设置原型
- Kendo UI数据源使用javascript对象设置
- 正在对通过object.create创建的对象设置原型
- 用对象设置函数变量's值
- 将对象设置为Backbone.js模型,而不必调用“;set()"在每一处房产上
- 将对象设置为Chrome存储
- 如何为不同的对象设置不同的灯箱
- 如何在基于json数据的Javascript中为网页上的多个对象设置动画
- 三.js - 如何为对象设置边框
- 将节点.js对象设置为从文件读取的数据
- Javascript:在为动态创建的对象设置 onClick 处理程序时避免 eval()
- 如何从另一个 json 对象为 json 对象设置值
- 为具有未定义值的嵌套对象设置默认值的最简单方法
- 如何为嵌套对象设置状态
- 将对象设置为jquery中attr()方法的值
- 如何为对象设置默认函数
- 通过全局对象设置骨干木偶模型
- 无法对未定义的对象设置属性
- 为我的对象设置空值