javascript 为什么会点击看不到更新

xtupzzrd  于 2023-01-11  发布在  Java
关注(0)|答案(2)|浏览(106)

我正在构建一个基于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);
    }
}
azpvetkf

azpvetkf1#

您应该将click函数与this绑定。

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.bind(this));
      }
 
      click(d) {
         if (d.children) {
            d._children = d.children;
            d.children = null;
         } else {
            d.children = d._children;
            d._children = null;
         }
        this.update(d);
     }
}
j9per5c4

j9per5c42#

我自己对这个问题进行了更多的阅读,我发现虽然javascript可以是函数式的,也可以是面向对象的,但d3js(在他们的wiki上这么说)是基于函数式编程的,因此试图使其面向对象似乎是一个错误。

相关问题