我在使用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;
};
}
答案 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
,因为我们说有,我们就是在谈论对象的关联
您可以创建A
和B
构造函数:
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。