从原型子对象访问对象的属性

时间:2012-07-12 15:25:57

标签: javascript prototype

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

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

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();

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:2)

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

function MainObject() {
    // your code

    this.subClass = {
        parent: this
    }
}