Home > database >  Showing class property value on click
Showing class property value on click

Time:04-29

I need to display the this.name in the console when clicking the button element.

I could replace inside clicked() and set console.log(myBtn.name) but I'd like this method to work with any object.

Is there a way to do it? When I click I get an empty string.

Thanks!

class Button {
  constructor(name, id) {
    this.name = name;
    this.ref = document.getElementById(id);


    this.init();
  }

  init() {
    this.ref.addEventListener("click", this.clicked);
  }

  clicked() {
    console.log(this.name);
  }
}

let myBtn = new Button('My button', "test");
<button id="test">Click me</button>

CodePudding user response:

You was almost there

The problem in your code is what this mean in the callback

When the button is pressed this is the button unless you told it otherwise

class Button {
  constructor(name, id) {
    this.name = name;
    this.ref = document.getElementById(id);


    this.init();
  }

  init() {
    this.ref.addEventListener("click", this.clicked.bind(this));
  }

  clicked() {
    console.log(this.name);
  }
}

let myBtn = new Button('My button', "test");
<button id="test">Click me</button>

  • Related