所以我是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();
答案 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>
除非您可以提供更多信息(例如您遇到的错误,或者当前输出与预期输出),否则我们将无济于事。