为了账号安全,请及时绑定邮箱和手机立即绑定

类:使用构造函数将 self 添加为属性

类:使用构造函数将 self 添加为属性

江户川乱折腾 2023-08-18 14:25:27
我想要一个 javascript 类,将其子级映射到children.这是我到目前为止得到的:export default class Item {    constructor (id, name, children = []) {        this.id = id;        this.name = name;        this.children = children.map((child)=>{            return new Item(child.id, child.name, child.children)        });    }    test(){        console.log("Test");    }    //...}如果我现在这样称呼:let children = [    {id: 1, name: 'foo'},    {id: 2, name: 'bar'},    {id: 3, name: 'foobar', children: [        {id: 4, name: 'foo'},        {id: 5, name: 'bar'},    ]},];let newItem = new Item (item.id, item.name, item.children)我想我会得到这样的递归映射:[  Item: { id: 1, name: 'foo' },  Item: { id: 2, name: 'bar' },  Item: { id: 3, name: 'foo', children: [ Item: { id: 4, name: 'foo'}, Item: { id: 5, name: 'bar'}] },]在这种情况下,我应该能够拜访test()任何孩子。newItem.children.forEach((child){ child.test(); });但这会抛出_vm.child.test 不是一个函数
查看完整描述

1 回答

?
慕后森

TA贡献1802条经验 获得超5个赞

你的代码完美运行。我怀疑这是你创建对象的方式。


在这里,我只是提供了一个id, 字符串 asname并发送到您的children对象中。您的代码未经修改即可创建您所期望的内容:


class Item {


  constructor(id, name, children = []) {

    this.id = id;

    this.name = name;

    this.children = children.map((child) => {

      return new Item(child.id, child.name, child.children)

    });

  }


  test() {

    console.log("Test");

  }


  //...

}


  let children = [{

      id: 1,

      name: 'foo'

    },

    {

      id: 2,

      name: 'bar'

    },

    {

      id: 3,

      name: 'foobar',

      children: [{

          id: 4,

          name: 'foo'

        },

        {

          id: 5,

          name: 'bar'

        },

      ]

    },

  ];


let newItem = new Item(1, 'item', children)


console.log(newItem)


查看完整回答
反对 回复 2023-08-18
  • 1 回答
  • 0 关注
  • 82 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信