不能访问此场景中的特定变量

Can't access a specific variable on this scenario

本文关键字:变量 访问 不能      更新时间:2023-09-26

我不明白为什么我不能访问that.Friends.name在这里(见下面的代码):

JS

function AClass(_Friends) {
  var that = this;
  this.Friends = _Friends;
  this.doSomething = function() {
    console.log(that.Friends.name); // Uncaught TypeError: Cannot read property 'name' of undefined 
  };
}
var A = new AClass({ name: 'toto' });
$('button').click(A.doSomething);

<button>TRY!</button>

我在我的类的控制器上使用var that = this,因为我可能对回调调用我的方法很感兴趣(就像在这个例子中),我不是很自豪,你有什么更好的方法使它工作(也许这是一个好主意重新定义this在这里)?

通过直接传递doSomething,您将其从对象中分离出来。无论是否使用jQuery,这将停止工作。

然而,为了明确地使停止工作(如果这有意义的话),jQuery强制this的值为在处理程序中单击的元素

要修复this(哈哈),只需要使用一个匿名函数;

$('button').click(function () {
    A.doSomething();
});

现在,匿名函数的值被强制为this,但我们真的不在乎,因为它是我们感兴趣的doSomething()的值;因为它仍然附属于A,并且没有通过callapply强制,所以它是我们需要的值。

这样,就不需要var that = this;虽然这是一个很常用的JavaScript习语/技术,所以我自己不会担心。

Friends是外部作用域的局部变量;您可以直接访问它,而无需使用that:

console.log(Friends.name);