Почему я не могу присвоить возвращенную функцию члену класса, но могу назначить ее переменной - PullRequest
0 голосов
/ 01 февраля 2019

Так что я новичок в Javascript, и у меня есть проблема, которая не имеет смысла для меня.Я не могу назначить функцию для члена класса, но я могу назначить ее для переменной.Но я могу назначить лямбду члену класса.

В чем разница между функцией, возвращаемой функцией d3.scaleLinear (), и лямбда-выражением?И почему я могу назначить одно, а не другое члену моего класса?

d3.scaleLinear () возвращает функцию, которая отображает значения домена (в данном случае -1, 0, 1 ... 5) длядиапазон (в данном случае оттенок черного).

Так что это работает:

class Foo {
    constructor() {
        var color = d3.scaleLinear()
            .domain([-1, 5])
            .range(["hsl(0,00%,70%)", "hsl(0,0%,0%)"])
            .interpolate(d3.interpolateHcl);
        alert(color(1));
    }
}
var bar = new Foo();

И это тоже работает:

class Foo {
    constructor() {
        this.color = () => alert("Test")
        color();
    }
}
var bar = new Foo();

Почему это не работает:

class Foo {
    constructor() {
        this.color = d3.scaleLinear()
            .domain([-1, 5])
            .range(["hsl(0,00%,70%)", "hsl(0,0%,0%)"])
            .interpolate(d3.interpolateHcl);
        alert(this.color(1));
    }
}
var bar = new Foo();

1 Ответ

0 голосов
/ 01 февраля 2019

Ваш код работает для меня.Этот минимальный тестовый пример выдает предупреждение с «rgb (115, 115, 115)» в качестве строки.

Если вы пытаетесь использовать классы в структуре наследования, вам может потребоваться вызвать super(); вначало вашего конструктора для доступа к унаследованным атрибутам, но для назначения базового класса, если ваш код работает нормально.

<html>
<head>
<script src="https://d3js.org/d3.v5.min.js"></script>
<script>
class Foo {
    constructor() {
        this.color = d3.scaleLinear()
            .domain([-1, 5])
            .range(["hsl(0,00%,70%)", "hsl(0,0%,0%)"])
            .interpolate(d3.interpolateHcl);
        alert(this.color(1));
    }
}
var bar = new Foo();
</script>
</head>
<body>
</body>
</html>

Если вы не можете предоставить дополнительную информацию (например, какие ошибки вы получаете, иливаши текущие и ожидаемые результаты) мы не можем вам помочь.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...