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

我想要一个 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 不是一个函数


江户川乱折腾
浏览 83回答 1
1回答

慕后森

你的代码完美运行。我怀疑这是你创建对象的方式。在这里,我只是提供了一个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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript