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 に答える