从JavaScript对象访问父函数

时间:2015-04-02 10:01:22

标签: javascript scope

我如何做以下事项:

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

  }
};
var parentObj = new Parent();
parentObj.Child.childFunction();

目前我得到" undefined不是一个功能"因为显然parentFunction()不在范围内,但我不确定使其可访问的最佳方法是什么?

3 个答案:

答案 0 :(得分:1)

this中的Child将引用Child对象而非Parent因此将this Parent的引用存储在变量中可以在childFunction稍后使用。

var Parent = function() {
  var _self = this; //Store the reference
  this.Child = {
    childFunction: function() {
      _self.parentFunction(); //Use here
    }
  };
  this.parentFunction = function() {
    alert('In parentFunction');
  }
};
var parentObj = new Parent();
parentObj.Child.childFunction();

答案 1 :(得分:0)

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

  }
};

现在在this.Child childFunction内,这将引用Child对象而不是Parent。

所以你必须使用self / that来引用父母。

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

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

      }
    };

您也可以使用Parent.parentFunction()。

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

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

      }
    };

答案 2 :(得分:0)

问题是this中的childFunction引用了Child的当前对象。

常见的解决方案是使用closure提供的变量访问父级。例如:

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

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

    this.parentFunction = function() {
        // ...
    }
};

或者,更麻烦的方法是使用bindchildFunction的函数上下文“绑定”到当前this(父项):

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

请参阅MDN