为什么我不能将返回的函数分配给类成员,却可以将其分配给变量

时间:2019-02-01 18:01:21

标签: javascript class d3.js member assign

所以我是Java语言的新手,但我遇到的问题对我来说没有意义。 我不能将函数分配给类成员,但可以将其分配给变量。 但是我可以将lambda分配给班级成员。

d3.scaleLinear()返回的函数和lambda有什么区别?为什么我可以给班级成员分配一个而不给另一个?

d3.scaleLinear()返回一个函数,该函数将domanin值(在这种情况下为-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 :(得分:0)

您提供的代码对我有用。这个最小的测试用例以字符串“ 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>

除非您可以提供更多信息(例如您遇到的错误,或者当前输出与预期输出),否则我们将无济于事。