我有一个Dog Constructor如下:
var Dog = function(name,type)
{
this.name = name;
this.type = type;
this.normalObjFunc = function()
{
this.name = "kl";
}
var retfunc = function()
{
return this.name;
}
return retfunc;
}
在 retfunc 函数()中,我尝试按以下方式访问this.name。
var dogObj = new Dog("hj","labrador");
alert(dogObj());
在输出中,我在警告messageBox中得到“结果”,我没有得到o / p“结果”,是什么意思?
我故意不将 retfunc 包含在“this”对象中,这是否意味着我无法访问retfunc()
内的 this.name ,因为这是一个“这个”会被创造出来吗?
我也知道分配var self =this
可以解决问题。
我只是想知道什么是“结果”哪个是输出,为什么不理想undefined
?
答案 0 :(得分:2)
问题是因为函数中this
的范围是window
。您需要在变量中缓存对象引用并调用它,如下所示:
var Dog = function(name, type) {
var _this = this;
this.name = name;
this.type = type;
this.normalObjFunc = function() {
_this.name = "kl";
}
var retfunc = function() {
return _this.name;
}
return retfunc;
}
var dogObj = new Dog("hj", "labrador");
console.log(dogObj());

或者你可以prototype
函数来保持this
的范围,但是你需要改变你的逻辑,因为这意味着Dog()
的返回值不能是函数
var Dog = function(name, type) {
this.name = name;
this.type = type;
}
Dog.prototype.normalObjFunc = function() {
this.name = "kl";
}
Dog.prototype.retfunc = function() {
return this.name;
}
var dogObj = new Dog("hj", "labrador");
console.log(dogObj.retfunc());