首页 >web前端 >js教程 >为什么在 JavaScript 中使用'var self = this”?

为什么在 JavaScript 中使用'var self = this”?

Susan Sarandon
Susan Sarandon原创
2024-11-27 02:11:10672浏览

Why Use

JavaScript 习惯用法:理解“var self = this”

“var self = this;”这种习惯用法在 JavaScript 代码中很常见,尤其是在事件处理程序中。它允许您在嵌套函数或事件处理程序闭包内维护对原始“this”对象的引用。

当您在构造函数或对象内定义函数时,执行上下文会发生变化,并且“this”引用到非严格模式下的全局对象(窗口)。在严格模式下,“this”将是未定义的。为了避免这种情况,开发人员使用“var self = this”来保留对原始对象的引用。

为什么使用“var self = this”?

考虑以下来自 WebKit 的 HTML5 SQL Storage Notes 演示的示例:

function Note() {
  var self = this;

  var note = document.createElement('div');
  note.className = 'note';
  note.addEventListener('mousedown', function(e) { return self.onMouseDown(e) }, false);
  note.addEventListener('click', function() { return self.onNoteClick() }, false);
  this.note = note;
  // ...
}

在此代码中,“self”被分配给“this”构造函数。这确保了当调用事件处理程序时(例如单击“note”div),“this”仍将引用原始 Note 对象,从而允许正确调用“onMouseDown”等方法。

“var self = this”常见吗?

是的,这个习惯用法在 JavaScript 应用程序中广泛使用,特别是在处理闭包时和事件处理程序。它允许开发人员在嵌套函数中维护对原始上下文的引用。

替代方法

虽然“var self = this”很有效,但它可能会令人困惑读。另一种方法是使用箭头函数(ES6 中引入),它保留周围上下文的“this”绑定。

例如:

function Note() {
  var note = document.createElement('div');
  note.className = 'note';
  note.addEventListener('mousedown', (e) => { this.onMouseDown(e) });
  note.addEventListener('click', () => { this.onNoteClick() });
  this.note = note;
  // ...
}

注意:

现在不鼓励使用“var self = this”,因为它可能由于存在而导致错误“窗口.self”。建议使用箭头函数或其他替代方法来维护“this”绑定。

以上是为什么在 JavaScript 中使用'var self = this”?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn