从对象数组中的一个对象访问父set / get方法

时间:2017-02-14 11:40:52

标签: javascript json

我有一个对象"父母"有一个setter / getter方法" a",这个对象也有一个对象数组"让我们称之为数组"使用对象构造函数创建,思考是使用"数组内的对象"我想访问方法a。

我为了更好的未完成而放了一些代码:

function parent()
{
   this.a; //This is a setter/getter method
   this.array=[]; // array of objects
   this.array.push(new child());
}

function child()
{
   this.aParentMehod;
}

b=new parent();

我想要的是b.array[0].aParentMethod返回b.a

顺便说一下,我使用了对象构造函数,因为我不知道我会有多少个孩子,但是这里有一个更好的方法,请告诉我。

提前谢谢

编辑:

我做到了这一点:

function parent()
{
   this.a; //This is a setter/getter method
   this.array=[]; // array of objects
   this.array.push(new child(self));
}

function child(self)
{
   this.parent=self;
   this.aParentMehod=this.parent.a;
}

b=new parent();

但是,当我更改父a个问题时,孩子有权改变,aParentMehod显示a

的主要内容

1 个答案:

答案 0 :(得分:0)

  

我想要的是b.array[0].aParentMethod返回b.a

你需要做两件事才能实现这一目标:

  1. 将父对象引用传递给子
  2. 向使用父引用的子项添加getter以获取a
  3. ,例如:(见***评论):

    function parent()
    {
       this.a;
       this.array=[];
       this.array.push(new child(this));                      // ***
    }
    
    function child(parent)                                    // ***
    {
       this.parent = parent;
    }
    Object.defineProperty(child.prototype, "aParentMethod", { // ***
        get: function() {                                     // ***
            return this.parent.a;                             // ***
        }                                                     // ***
    });                                                       // ***
    
    b=new parent();
    

    这不是一个理想的结构;理想情况下,你要避免让孩子引用父母(这几乎意味着它不能aParentMethod)。

    旁注:JavaScript中压倒性的惯例是像你这样的构造函数是用大写字母写的。所以ParentChild而不是parentchild。像这样的公约有助于提高可读性。