从JavaScript对象访问父函数

从JavaScript对象访问父函数,javascript,scope,Javascript,Scope,我将如何执行以下操作: var Parent = function() { this.Child = { childFunction: function() { this.parentFunction(); } }; this.parentFunction = function() { } }; var parentObj = new Parent(); parentObj.Child.childFunction(); 现在我得到了“undefine

我将如何执行以下操作:

var Parent = function() {
 this.Child = {
    childFunction: function() {
      this.parentFunction();
    }
  };
  this.parentFunction = function() {

  }
};
var parentObj = new Parent();
parentObj.Child.childFunction();
现在我得到了“undefined is not a function”,因为显然parentFunction()不在范围内,但我不确定使其可访问的最佳方法是什么

var Parent = function() {
 this.Child = {
    childFunction: function() {
      this.parentFunction();
    }
  };
  this.parentFunction = function() {

  }
};
现在在
this.Child childFunction
中,这将引用子对象而不是父对象

所以你必须用self/that来指代父母

 var Parent = function() {
     var that = this;
     this.Child = {

        childFunction: function() {
          that.parentFunction();
        }
      };
      this.parentFunction = function() {

      }
    };
您也可以使用Parent.parentFunction()


由于
Child
中的
this
将引用
Child
对象而不是
Parent
,因此将
this
引用存储在一个变量中,该变量稍后可在
childFunction
中使用

var Parent=function(){
var _self=this;//存储引用
此.Child={
childFunction:function(){
_self.parentFunction();//在此处使用
}
};
this.parentFunction=函数(){
警报(“在父函数中”);
}
};
var parentObj=新的父对象();

parentObj.Child.childFunction()
问题在于
您的
子函数中的
引用了当前对象,即

常见的解决方案是使用一个可通过。例如:

var Parent = function() {
    var _this = this;

    this.Child = {
       childFunction: function() {
          _this.parentFunction();
       }
     };

    this.parentFunction = function() {
        // ...
    }
};
或者,更麻烦的方法是将
子函数的函数上下文
与当前
this
(即父函数)“绑定”到一起:

var Parent = function() {
    var _this = this;

    this.Child = {
       childFunction: function() {
          _this.parentFunction();
       }
     };

    this.parentFunction = function() {
        // ...
    }
};
childFunction: function() {
    this.parentFunction();
}.bind(this);