我正在重构一些JS代码,需要访问像
这样的对象Object1.Object2.IsValid();
这就是我现在所拥有的。
function _Object1(object) {
this._object1 = object;
this.Object2= new _Object2();
function IsValid() {
// tests here
}
}
function _Object2()
{
function IsValid() {
// tests here but needs to use Object1 property above.
}
}
只有问题在于,我不知道如何在不传递任何参数的情况下访问Object2中的Object1。在Object1中嵌套Object2,也许?
编辑:我想在JS中实现OOP,就像重新发明轮子一样,但是现在想尝试一下:)
我将用OOP来解释这个问题:
我有一个班级_Object1
,它有一个方法IsValid()
。 _Object1
还有一个属性Object2
,其类型为_Object2
。
现在,_Object2
也有名为IsValid()
的方法。但是这里有一个问题,_Object2.IsValid
需要_Object1
的值来进行测试。
如果我这样做以上代码:
var Object1 = new _Object1();
我可以简单地调用Object1.Object2.IsValid()
来获得结果。不是吗?
免责声明:我现在一直在使用JS,但从来不必涉及这些事情。
答案 0 :(得分:3)
给_Object2
它需要的东西:
function _Object1(object) {
this._object1 = object;
this.Object2= new _Object2(this);
function IsValid() {
// tests here
}
}
function _Object2(parentObject)
{
function IsValid() {
// parentObject refers to the _Object1 that created this object
}
}
答案 1 :(得分:1)
我认为你所寻找的是不可能的,除非你愿意将数据传递给对象。
仅仅因为您的_Object2
实例已在_Object1
构造函数中创建,它不会自动引用您的_Object1
实例的数据。您必须在构造函数中或通过其他方法告诉_Object2
实例_Object1
值:
function _Object2(parentObject) { /* ... */ }
// or
_Object2.prototype.setParent = function(parent) { /* ... */}
// or
myObject2.parent = this._object1;