Мне сложно понять, как метод call используется в D3 и как это сравнивается с другими его применениями в JavaScript.
Мое понимание того, как метод call используется в стандарте JS заключается в том, что он позволяет вызывать функцию в определенном контексте. Например:
let JoJo = {
name: `JoJo`,
age: 33
};
function sayName(){
console.log(`My name is ${this.name}`);
}
sayName.call(JoJo);
Это гарантирует, что sayName () вызывается в контексте JoJo (то есть, как если бы это был метод объекта JoJo).
Но, похоже, отличается от того, как он используется здесь Скоттом Мюрреем:
var xAxis = d3.svg.axis()
.scale(xScale)
.orient("bottom");
svg.append("g")
.call(xAxis);
Как объясняет Мюррей:
Функция call () D3 принимает выбор как ввод и руки этот выбор отключен от любой функции ... Этот g становится выбором для следующего звена в цепочке. call () передает этот выбор функции xAxis, поэтому наша ось создается в новом g.
Итак, в первом примере call используется для вызова функции в контексте конкретный объект (вызов которого принимает в качестве аргумента). Во втором случае он просто передает объект функции (вызов которой принимает в качестве аргумента).
Я новичок как в JS, так и в D3, но мне кажется, что есть два в этих примерах происходит совсем другое. Ясно, что мне здесь не хватает чего-то фундаментального. Если бы кто-нибудь мог пролить свет на это, был бы очень признателен!