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

Is it possible to refer to another element inside a JS array/object

本文关键字:对象 另一个 元素 数组 引用 JS 是否      更新时间:2024-02-05

不知怎么的,我找不到合适的术语来搜索这个问题,基本上我想用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);}
},
];

目标是让操作记录用它定义的文本。


第二版:由于@EnigmaRM几乎清除了所有内容,这是一个奖励

而不是

 demo[1].action()

解决它,而行动是这样称的:

 var someCaller = demo[1].action;
 someCaller();

您可以很容易地拆分动态部分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].action,则this现在引用"somecaller",而该"somecallor"不具有原始demo对象的其他属性,因此获得undefined

是的,

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}];