2

鉴于以下代码,是否可以从“子”对象内部访问对象的属性?

我想我这样做是完全错误的,但我不确定这里的正确模式是什么。任何帮助将非常感激。

function MainObject(){
    this.someProperty = "asdf";
    return this;
}

MainObject.prototype.subClass = {};
MainObject.prototype.subClass.sayHi = function(){
    // 'this' refers to the instance of MainObject.subClass
    // How do I get to the instance's MainObject.someProperty property from here,
    // without calling "widget.someProperty"?
};

widget = new MainObject();
4

2 回答 2

3

你不能,因为没有对实际实例的引用。您必须subClass为构造函数中的每个实例进行初始化:

function MainObject(){
    var self = this;
    this.someProperty = "asdf";
    this.subClass = {};
    this.subClass.sayHi = function(){
        //self.someProperty
    }
};

但这复制了功能。看来您应该完全选择其他方法。

也许使用组合会更好,但这实际上取决于您要做什么以及“类”如何相互关联。

function SubClass(instance) {
    this.instance = instance;
}

SubClass.prototype.sayHi = ...;

function MainObject(){
    this.someProperty = "asdf";
    this.subClass = new SubClass(this);
}
于 2012-07-12T15:30:23.627 回答
2

没有对实际父级的引用,因此您必须在子类中手动存储一个。这是一个例子:

function MainObject() {
    // your code

    this.subClass = {
        parent: this
    }
}
于 2012-07-12T15:28:44.910 回答