【问题标题】:How to access a class data member from a method withing same class [duplicate]如何从同一类中的方法访问类数据成员[重复]
【发布时间】:2018-03-05 15:59:00
【问题描述】:

我有一个类,它有一个构造函数。 我通过this.something 分配了一个类变量,并且没有在同一个类中的某个其他函数中访问它。

下面是我的课

class A {
    some_func() {
        console.log(this.var1);  // this is giving undefined
    }
    constructor(socket, var1) {
        this.socket = socket;
        this.var1 = var1;

        this.socket.on('some event', some_func);
    }
}

some_func 函数内部,变量未定义。 我该如何解决?

【问题讨论】:

  • some_func() 中创建一个console.log(this);。检查这是否实际上是指 a 类或套接字。您可能需要将其称为 some_func.bind(this)
  • 当您分配一个函数时,您的this 上下文不会自动附加到函数调用中,.. 要解决这个问题,您可以这样做 -> this.some_func.bind(this)
  • @palash 对! bind() 方法完成了工作!干杯!

标签: javascript class methods event-handling


【解决方案1】:

我认为您的代码没有问题。您确定在使用该方法之前实例化变量吗?如下图

class A {

    constructor(socket, var1) {
        this.socket = socket;
        this.var1 = var1;

        //this.socket.on('some event', this.some_func);
    }
    
    some_func() {
        console.log(this.var1);  // this is giving undefined
    }
}

var instanceA = new A('socket', 'var')

instanceA.some_func() // Returns 'var'

【讨论】:

  • I don't see a problem 因为你没有做同样的事情,将this.socket.on 更改为简单的setTimeout,你会遇到同样的问题。
  • 确保您引用的是 this.some_func 而不是 some_func
  • 这不是我想要的。 setTimeout 对我不起作用
  • @Shantanu 这不是我的建议,我的建议是模拟您看到的问题。以及为什么按照我和帕拉的建议使用bind
猜你喜欢
  • 1970-01-01
  • 2012-01-06
  • 2016-07-21
  • 2015-04-22
  • 1970-01-01
  • 2020-06-02
  • 2012-11-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多