我如何做以下事项:
var Parent = function() {
this.Child = {
childFunction: function() {
this.parentFunction();
}
};
this.parentFunction = function() {
}
};
var parentObj = new Parent();
parentObj.Child.childFunction();
目前我得到" undefined不是一个功能"因为显然parentFunction()不在范围内,但我不确定使其可访问的最佳方法是什么?
答案 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() {
// ...
}
};
或者,更麻烦的方法是使用bind将childFunction
的函数上下文“绑定”到当前this
(父项):
childFunction: function() {
this.parentFunction();
}.bind(this);
请参阅MDN