鉴于以下代码是否可以从“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();
答案 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
}
}