是否可以引用JS数组/对象中的另一个元素

时间:2015-02-19 17:07:51

标签: javascript arrays

不知怎的,我找不到合适的术语来搜索这个问题,基本上我想用javascript做这个:

var demo = [{part1: 'a', part2: 'b', part3: this.part1 + this.part2}];

现在我认为这是不可能的,但由于我无法确定为什么以及如何称呼这个结构,也许这里有人可以。

  • 是否有针对此情况的术语或准确描述?
  • 可以用js解决吗?

谢谢!

编辑:

由于评论,我需要更具体:

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();

2 个答案:

答案 0 :(得分:2)

您可以轻松地拆分动态部分demo.part3demo.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].actionthis现在引用了一些调用者',它没有原始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}];