【问题标题】:How to get updated object array in extended class javascript如何在扩展类 javascript 中获取更新的对象数组
【发布时间】:2021-07-11 07:01:39
【问题描述】:

大家好,我是 ES6 类的新手,目前想用更新的数据继承启动的对象(this._obj),但在 B 类中,我获取的是启动对象的长度而不是更新的对象?

class A {
      constructor() {
        //intiating array of object with length 0
        this._obj = new Object();
        this._obj['abarray'] = [];
      }
      _renderData() {
        let datas = {
          id: 1,
          name: 'abc',
        };
        this._obj['abarray'].push(datas);
        console.log(this._obj);
        //output
        /*{abarray: Array(1)}
        abarray: Array(1)
        0: {id: 1, name: "abc"}
        length: 1
        __proto__: Array(0)
        __proto__: Object 
       */
      }
    }
    const a = new A();
    a._renderData();
    
    class B extends A {
      constructor() {
        super();
      }
      _showObjectData() {
        //here i want to get the updated object with length 1 as shown in output but i getting as intialized
        /*
        {abarray: Array(0)}
            abarray: Array(0)
            length: 0
            __proto__: Array(0)
            __proto__: Object
        */
        console.log(this._obj);
      }
    }
    const b = new B();
    b._showObjectData();

请任何人都可以帮助如何实现这一目标...

【问题讨论】:

    标签: javascript jquery reactjs angularjs es6-class


    【解决方案1】:

    A 的实例上调用_renderData 不会影响AB 的其他实例,如果您想为B 的每个实例调用_renderData,请进行调用构造函数本身,否则在 B 的各个实例上调用它。

    在下面的代码 sn-p 中,我创建了另一个 A 实例并将其存储在变量 a1 中,现在如果您记录 a1._obj,它将与 a._obj 不同。

    class A {
      constructor() {
        this._obj = new Object();
        this._obj["abarray"] = [];
      }
      _renderData() {
        let datas = { id: 1, name: "abc" };
        this._obj["abarray"].push(datas);
      }
    }
    
    const a = new A();
    a._renderData();
    console.log("a", a._obj);
    
    // Another instance of "A"
    const a1 = new A();
    console.log("a1", a1._obj); // a1._obj is not same as a._obj

    Bconstructor 中调用它。

    class A {
      constructor() {
        this._obj = new Object();
        this._obj["abarray"] = [];
      }
      _renderData() {
        let datas = { id: 1, name: "abc" };
        this._obj["abarray"].push(datas);
      }
    }
    
    const a = new A();
    a._renderData();
    console.log("a", a._obj);
    
    class B extends A {
      constructor() {
        super();
        this._renderData();
      }
      _showObjectData() {
        return this._obj;
      }
    }
    
    const b = new B();
    console.log("b", b._showObjectData());

    B 的实例上调用它。

    class A {
      constructor() {
        //intiating array of object with length 0
        this._obj = new Object();
        this._obj["abarray"] = [];
      }
      _renderData() {
        let datas = { id: 1, name: "abc" };
        this._obj["abarray"].push(datas);
      }
    }
    
    const a = new A();
    a._renderData();
    console.log("a", a._obj);
    
    class B extends A {
      constructor() {
        super();
      }
      _showObjectData() {
        return this._obj;
      }
    }
    
    const b = new B();
    b._renderData();
    console.log("b", b._showObjectData());

    【讨论】:

    • @GoudaPatil 请检查这是否解决了您的问题,如果您有任何问题,请告诉我。
    • 我可以按相反的顺序做同样的事情吗,我的意思是我将删除 B 类中的数组数据并再次更新它,它可以为 A 类更新吗?
    猜你喜欢
    • 1970-01-01
    • 2020-04-27
    • 2018-09-09
    • 2017-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-01-03
    • 2016-12-27
    • 2018-10-16
    相关资源
    最近更新 更多