原型中的“ this”使用窗口而不是对象

时间:2019-06-01 20:29:59

标签: javascript prototype q

我创建了一个名为Survey的对象,并向其添加了原型函数,当我在原型函数中进行控制台记录时,日志显示的是窗口对象,而不是父Survey对象。

function Survey(questions = []) {
  this.__questions__ = questions;
};
Survey.prototype.testFunction = () => {
  console.log(this);
  return this.__questions__;
}
// Create your object here
const SUR = new Survey(['1','2']);

SUR.testFunction(); // this prints [[Window]] Object instead of Survey

预期结果将是Survey对象

2 个答案:

答案 0 :(得分:2)

这是因为您使用了Arrow function。 在箭头功能中,this将指向外部。只需使用普通函数即可。

Survey.prototype.testFunction = function() {
  console.log(this);
  return this.__questions__;
}

答案 1 :(得分:2)

问题已经解决了:

Survey.prototype.testFunction = () => {}

箭头函数没有this上下文,它将从方法外部使用this上下文。由于未定义其他此上下文,因此它将成为窗口对象。

修复非常简单:使用常规函数:

Survey.prototype.testFunction = function () {}