从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);