我对Java语言非常陌生,只是坚持使用在python中有效的工具。 问题是我有一个在其中初始化一些空列表的类,例如this.data_y_json等。如果我在诸如normal_function(){this.data_y_json = 5}之类的类中创建普通函数,它将起作用并且更改了变量。 但是,我使用d3,但有一些技巧无法解决:
// inside class
// in constructor all this.xxx defined
// after object initiation I call set_data()
set_data(){
d3.json("link2.json",function(data) {
for (var i=0;i<data.d.results.length;i++){
this.data_y_json.push(parseFloat(data.d.results[i].PE))
...
//end of function
// end of class
调用函数set_data()后,引发错误: SCRIPT5007:无法获取未定义或空引用的属性'data_y_json'
我正在将可视化重写为OOP,在此之前,我使用全局变量对其进行了求解,并且可以正常工作。在python中,我只是将'self'作为函数的参数传递,但是在javascript中,传递THIS无效,并引发另一个错误。
简单地说,我知道问题->无法正确识别出this.data_y_json,因为function(data)无法传递对象的自身,但是我不知道该怎么做。
预先感谢您的建议
答案 0 :(得分:3)
您是否在ES2015环境中?将回调更改为箭头函数应将this
的范围设置为您想要的
d3.json("link2.json", (data) => {
for (var i=0;i<data.d.results.length;i++){
this.data_y_json.push(parseFloat(data.d.results[i].PE))
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/Arrow_functions
用于阅读箭头功能及其作用域