Javascript underscore.js- 我是否必须使用上下文参数和 'this'?
Javascript underscore.js- do I have to use a context parameter and 'this'?
在我正在观看的教程中,这段代码用于演示 _.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);
在我正在观看的教程中,这段代码用于演示 _.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);