不知怎的,我找不到合适的术语来搜索这个问题,基本上我想用javascript做这个:
var demo = [{part1: 'a', part2: 'b', part3: this.part1 + this.part2}];
现在我认为这是不可能的,但由于我无法确定为什么以及如何称呼这个结构,也许这里有人可以。
谢谢!
编辑:
由于评论,我需要更具体:
var demo = [
{
text: 'long text',
action: function(xy) { log(text);}
},
{
text: 'long text2',
action: function(xy) { log(text);}
},
];
目标是让操作记录用它定义的文本。
EDIT2:因为@EnigmaRM已经清除了几乎所有内容,这是一个奖金
而不是
demo[1].action()
在以这种方式调用动作时解决它:
var someCaller = demo[1].action;
someCaller();
答案 0 :(得分:2)
您可以轻松地拆分动态部分demo.part3
或demo.action
,并在定义对象后调用它。
var demo = {
text: 'long text',
};
demo.action = function(xy){console.log(this.text)};
同样地,
var demo = {part1: 'a', part2: 'b'};
demo.part3 = demo.part1 + demo.part2;
// {part1: "a", part2: "b", part3: "ab"}
如果您想保持对象数组格式
var demo = [{
part1: 'a',
part2: 'b',
part3: function(){return this.part1 + this.part2;}
}
];
然后在使用part3
时,您会将其称为demo[0].part3()
,它会为您提供'ab'
您不断修改您尝试略微完成的内容。这是您最新编辑的更新示例。
var demo = [
{
text: 'long text',
action: function(xy) {
console.log(this.text);
}
},
{
text: 'long text2',
action: function(xy) {
console.log(this.text);
}
}
];
调用&结果
demo[0].action() // long text
demo[1].action() // long text2
编辑2回答
var someCaller = demo[1].action();
someCaller; //long text2
我相信您希望将demo[1].action()
的结果传递给变量,而不是像现在一样将整个函数分配给变量。因此,只需在赋值中添加()
即可调用要运行的函数并将结果传递给someCaller
。
由于我们使用了this
,因此需要这样做。这总是指它引用的父对象。因此,如果您执行var someCaller = demo[1].action
,this
现在引用了一些调用者',它没有原始demo
对象的其他属性,因此您得到{{1} }}
答案 1 :(得分:0)
是的,你可以,
var newObj = { part1: 'a', part2: 'b' };
newObj.part3 = newObj.part1 + newObj.part2;
demo = [newObj];
或
var demo = [{part1: 'a', part2: 'b', part3: demo[0].part1 + demo[0].part2}];