Javascript underscore.js-我必须使用上下文参数和'this'吗?
问题描述:
在教程中,我看着下划线这段代码是用来证明_.each
:Javascript underscore.js-我必须使用上下文参数和'this'吗?
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
被作为绑定this
到people
对象的上下文为_.each
呼叫通过,但我不不明白为什么这是必要的。在迭代器函数体内我不能明确写出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);
因为那么函数可以推广到适用于任何对象而不是一个特定的对象。 –
_为什么这是必要的_这是不必要的,但非常有用 – hindmost
“上下文”是一个滥用JavaScript的术语。将“*作为*的上下文”替换为“to”,也许它更有意义。说“*人*被分配给函数的* this *”也是更正确的,因为这会发生。 – RobG