AssemblyScript / assemblyscript

A TypeScript-like language for WebAssembly.
https://www.assemblyscript.org
Apache License 2.0
16.6k stars 650 forks source link

Correct usage of "this" in assemblyscript #2849

Open johnhill396 opened 3 weeks ago

johnhill396 commented 3 weeks ago

Question

I'm working on an AssemblyScript application. The way the code is structured requires passing an instance of a class in the constructor of another class. For example:

class Something {

  constructor(private context: MyContext) { }

  testMethod(): void {
    //Some logic which uses variables and methods from context class  
    let a: this.context.getSomething();
  }
}

class MyContext {

  //Is below a correct usage of 'this'?
  somethingObj: Something = new Something(this);

  myMethod(): void {
    //Some logic which uses somethingObj
    this.somethingObj.testMethod()
  }

}

I'm able to build and run the code successfully. But, is the above field somethingObj in MyContext class correctly using 'this' keyword? Could this somehow lead to some runtime errors around out of bounds memory access?

CountBleck commented 3 weeks ago

I'm pretty sure this is okay.

HerrCai0907 commented 3 weeks ago

It is ok. But you should note that this is not initialized at this moment.

johnhill396 commented 3 weeks ago

It is ok. But you should note that this is not initialized at this moment.

yeah, that's what I was worried about. Could that cause any issues at runtime? Any best practices around it?

MaxGraey commented 3 weeks ago

You can just use this as alterative:

class MyContext {
  somethingObj: Something!; // use exclamation mark

  constructor() {
    this.somethingObj = new Something(this)
  }

  myMethod(): void {
    this.somethingObj.testMethod()
  }
}