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;
}