我正在构建一个基于d3js的javascript frontpage。在将一些代码从functional重新构造为OOP时,click方法无法找到update方法。我得到Uncatched ReferenceError:更新没有定义。我认为它和作用域有关,但是我对js很陌生,所以他们很难弄清楚,有什么想法吗?
class UpdateTree{
update(source){}
enter_new_nodes_at_the_parents_previous_position(node, source){
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.attr("transform", function (d) { return "translate(" + source.y0 + "," + source.x0 + ")"; })
.on("click", this.click);
}
click(d) {
if (d.children) {
d._children = d.children;
d.children = null;
} else {
d.children = d._children;
d._children = null;
}
this.update(d);
}
}
2条答案
按热度按时间azpvetkf1#
您应该将
click
函数与this
绑定。j9per5c42#
我自己对这个问题进行了更多的阅读,我发现虽然javascript可以是函数式的,也可以是面向对象的,但d3js(在他们的wiki上这么说)是基于函数式编程的,因此试图使其面向对象似乎是一个错误。