在构造函数中的独立函数内访问“this”

时间:2017-01-16 10:59:12

标签: javascript jquery javascript-events javascript-objects

我有一个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

1 个答案:

答案 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());