父对象是否在JavaScript中知道其子对象?

时间:2016-03-11 06:57:37

标签: javascript

假设我们有:

var parent = {};
var child = Object.create(parent);

父母可以枚举孩子并以某种方式使用他们的属性和方法吗? 是的,我可以创建一个孩子阵列。但是,有可能忘记与另一个新孩子一起做。

3 个答案:

答案 0 :(得分:1)

无视非正统的术语,你不能强制执行继承实例,因此没有可靠的方法去做你想做的事。

试试Post-It; - )

答案 1 :(得分:0)

您需要一些参考。对象不会自动知道其父对象。但是我认为您可以保存父对象本身,而不是保存索引。父项通过引用存储,因此如果父项被修改,则子项的父引用将反映这些更改。这在下面的代码略有改动的版本中显示:

function parent() {
    this.index = 0;
    // Make children a property (for this test case) and 
    // pass 'this' (the parent itself) to a child's constructor.
    this.children = [new child(this)];
}

function child(parent) {
    // Store the parent reference.
    this.parent = parent;
}

// Do this after the functions are declared. ;)
var parents = [new parent()];

// Set a property of the parent.
parents[0].test = "Hello";

// Read back the property through the parent property of a child.
alert(parents[0].children[0].parent.test); // Shows "Hello"

答案 2 :(得分:0)

这不是父/子关系。 这是一个原型继承链接。

原型继承不一样。

const a = { x: 1, y: 2, doZ () { } };
const b = Object.create(a);
b.__proto__ === a; // true

老式的版本就是这样做:

function A (x, y) {
  this.x = x;
  this.y = y;
}

A.prototype.doZ = function () { };

var a = new A(1, 2);

function B () { }
B.prototype = a;


var b = new B();
var c = new B();
var d = new B();

是否应允许a遍历B的所有实例? 不是,不。