Javascript 从自执行匿名成员函数内部访问父原型范围

Javascript 从自执行匿名成员函数内部访问父原型范围,javascript,scope,anonymous-function,Javascript,Scope,Anonymous Function,我正在定义一个父对象,我希望它有一个子成员对象,它有自己的函数和私有变量。为了封装函数和变量,我在父原型中添加了一个自动执行的匿名函数 下面是演示问题的代码: var Parent=function(){ this.memberVariable='hello world'; } Parent.prototype.doSomething=函数(){ 返回此.childObject.doSomething(); }; Parent.prototype.childObject=函数(){ //“th

我正在定义一个父对象,我希望它有一个子成员对象,它有自己的函数和私有变量。为了封装函数和变量,我在父原型中添加了一个自动执行的匿名函数

下面是演示问题的代码:

var Parent=function(){
this.memberVariable='hello world';
}
Parent.prototype.doSomething=函数(){
返回此.childObject.doSomething();
};
Parent.prototype.childObject=函数(){
//“this”不是父对象,而是窗口对象。解决此问题的最佳方法是什么?
var=这个;
返回{
doSomething:function(){
//未定义,但应为“hello world”
返回该.memberVariable;
}
}
}();
var parent=新父级();
console.log(parent.doSomething())使用或:

或者您可以使用:

使用或:

或者您可以使用:


Parent
构造函数内初始化
childObject
。否则,
Parent
的所有实例将共享相同的
childObject
。那可能不是你想要的

function Parent() {
  this.childObject = new Child(this); // or something like makeChild(parent), or just an object literal.
}

function Child(parent) {
  this.parent = parent;
}

Parent
构造函数内初始化
childObject
。否则,
Parent
的所有实例将共享相同的
childObject
。那可能不是你想要的

function Parent() {
  this.childObject = new Child(this); // or something like makeChild(parent), or just an object literal.
}

function Child(parent) {
  this.parent = parent;
}

您应该查看模块/显示模块模式。。。你不能有一个IEFE来创建一个原型方法,并期望在里面得到一个动态的
this
。。。你不可能有一个IEFE来创建一个原型方法,并期望在里面得到一个动态的
this
。调用()的可能重复也是我尝试过的事情之一,但我也不太喜欢它,因为它必须附加到
childObject
的每个调用中。这是最好的方法吗?
.call()
也是我尝试过的方法之一,但我也不太喜欢它,因为它必须附加到对
childObject
的每个调用中。这是最好的方法吗?我没有想到这一点,因为父对象是单身,所以我没有考虑
childObject
定义的范围。这是一个更干净的解决方案。谢谢我没有想到这一点,因为父对象是一个单体,所以我没有考虑
childObject
定义的范围。这是一个更干净的解决方案。谢谢
function Parent() {
  this.childObject = new Child(this); // or something like makeChild(parent), or just an object literal.
}

function Child(parent) {
  this.parent = parent;
}