亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

類:使用構造函數將 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 關注
  • 117 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號