JavaScript中的嵌套对象

时间:2014-07-02 14:54:50

标签: javascript

我在使用JavaScript构建一些代码时遇到一些麻烦,下面是我想如何使用代码的示例:

var instance = new myObject("foo", "bar");
var sub = new myObject.subObject("x", "y", "z");
instance.doSomething();

subObject无法访问myObject的属性(例如“foo”和“bar”,在本例中),而myObject只是简单地封装了subObject,如果你看到我的意思。在此示例中,“x”,“y”和“z”是myObject.subObject实例的本地。

myObject中的函数(例如doSomething())本身可以创建myObject.subObject的一些实例,并且可以访问myObject的属性,例如“foo”和“bar”。

那么myObject采用什么结构形式?

编辑:

我正在思考这些问题:

function myObject(foo, bar) {
    this.foo = foo;
    this.bar = bar;

    this.doSomething = function() {
        var a = new this.subObject("x", "y", "z");
        var b = new this.subObject("1", "2", "3");
        console.log(a.x, a.y, a.z, b.x, b.y, b.z);
        };

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

2 个答案:

答案 0 :(得分:1)

myObject.subObject只是一个普通的构造函数。你不需要做什么特别的事情" islolate"属性。 instance永远不会知道sub,反之亦然。我将构造函数名称大写,以便它更清楚什么是实例,什么是cosntructor:

function MyObject(a, b) {
    // do stuff with a and b
}
MyObject.prototype.doSomething = function() {
    var innerSub = new MyObject.SubObject();
    // or 
    // var innerSub = new this.constructor.SubObject();
};

MyObject.SubObject = function(x, y, z) 
    // do stuff with x,y and z
};


var instance = new MyObject("foo", "bar");
var sub = new MyObject.SubObject("x", "y", "z");
instance.doSomething();

MyObject.SubObject`确实没什么特别之处。由于函数本身就是对象,因此您可以按照自己的意愿添加属性。

答案 1 :(得分:0)

我相信你正在寻找作文。

如果你的对象A里面有B,因为我们说,我们就是在谈论对象的关联

您可以创建AB构造函数:

var A = function() { };

var B = function(associatedA) {
   this.parent = associatedA;
};

var instanceOfB = new B(new A());

// This provides access to "A" instance
var parent = instanceOfB.parent;

如果您想在B内创建A的实例,那么您应该找不到任何问题,因为它是关于使用常规{{创建A的实例1}} operator。