Javascript 下划线.js - 我必须使用上下文参数和“this”吗?

Javascript underscore.js- do I have to use a context parameter and 'this'?

本文关键字:参数 this 上下文 js 下划线 Javascript      更新时间:2023-09-26

在我正在观看的教程中,下划线此代码用于演示_.each

var people = {
    names: ['Craig', 'John', 'Dan', 'Elijah'],
    getMessage: function(name) {
      return 'Hello there, ' + name + '!';
    }
};
_.each(people.names, function(element, index, list) {
  console.log(this.getMessage(element))
}, people);

据解释,people作为_.each调用的上下文传递,以将this绑定到people对象,但我不明白为什么这是必要的。在迭代器函数的主体中,我不能显式写出people.getMessage吗?

喜欢:

_.each(people.names, function(element, index, list) {
  console.log(people.getMessage(element));
});

为什么要使用this并且必须在上下文中传递?

就像评论中提到的,这不是必需的,但在某些情况下可能很有用。它还使迭代器函数不知道上述范围。它只知道它正在处理具有getMessage()方法且未链接到闭包中的特定变量的对象。

我能想到的一个例子是能够将其重用于具有相同类型结构但在作用域中未命名people的不同对象。

var people = {
    names: ['Craig', 'John', 'Dan', 'Elijah'],
    getMessage: function(name) {
      return 'Hello there, ' + name + '!';
    }
};
var dogs = {
  names: ['Jimmy', 'Rufus', 'Woofie', 'Silly'],
  getMessage: function(name) {
      return 'Woof there, ' + name + '!';
    }
};
function logTheMessage(element) {
  console.log(this.getMessage(element));
}
_.each(people.names, logTheMessage, people);
_.each(people.names, logTheMessage, dogs);