Javascript-在函数中传递THIS不起作用

时间:2018-08-06 21:26:13

标签: javascript class variables d3.js this

我对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)无法传递对象的自身,但是我不知道该怎么做。

预先感谢您的建议

1 个答案:

答案 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

用于阅读箭头功能及其作用域