amritdevilo
amritdevilo

Reputation: 86

Cannot understand class to function mapping in javascript

class Parent {
    print() {
        console.log('hey i am parent');
    }
}

class Child extends Parent {
    constructor() {
        super();
    }
    print() {
        console.log('hey i am child');
    }
}

x = new Parent();
console.log(Object.getPrototypeOf(x))
x.print();

Though the [[prototype]] of x is an empty object but still It can access the print() function which is defined in class Parent.

I cannot understand why Object.getPrototypeOf(x) is an empty object.

Upvotes: 1

Views: 52

Answers (2)

Bergi
Bergi

Reputation: 664434

What makes you think it's empty? It does have constructor and print properties, they are however not enumerable and not displayed by default on the console. (And of course it does have a [[prototype]] link to Object.prototype, but how/whether that is displayed depends on your console as well).

To inspect them, have a look at Get functions (methods) of a class.

Upvotes: 1

Derek 朕會功夫
Derek 朕會功夫

Reputation: 94319

It's in there, just non-enumerable. Try this:

Object.getOwnPropertyNames(Object.getPrototypeOf(x));

// ["constructor", "print"]

class Parent {
  print() {
    console.log('hey i am parent');
  }
}

class Child extends Parent {
  constructor() {
    super();
  }
  print() {
    console.log('hey i am child');
  }
}

x = new Parent();
console.log(Object.getOwnPropertyNames(Object.getPrototypeOf(x)));
x.print();

Upvotes: 3

Related Questions