一尘不染

JavaScript惯用语的基础是什么:var self = this?

javascript

我在WebKit HTML 5 SQL Storage NotesDemo的源代码中看到以下内容:

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;
  // ...
}

阅读 380

收藏
2020-04-25

共1个答案

一尘不染

self``this即使上下文在变化,也用于维护对原始文档的引用。这是事件处理程序中经常使用的一种技术(尤其是在闭包中)。

编辑: 请注意,self现在不鼓励使用,window.self如果您不小心的话,有可能导致错误。

您所说的变量并不重要。var that = this;很好,但是名称没有任何魔术。

在上下文中声明的函数(例如,回调,闭包)将有权访问在相同范围或更高范围中声明的变量/函数。

例如,一个简单的事件回调:

function MyConstructor(options) {

  let that = this;



  this.someprop = options.someprop || 'defaultprop';



  document.addEventListener('click', (event) => {

    alert(that.someprop);

  });

}



new MyConstructor({

  someprop: "Hello World"

});
2020-04-25