1

Take the following code:

function OldSchool() {}

OldSchool.prototype = {
  foo: "bar",
};

class NewSchool {
  foo = "bar";
}

let oldSchool = new OldSchool,
    newSchool = new NewSchool;

// false, true
console.log(
  oldSchool.hasOwnProperty("foo"),
  newSchool.hasOwnProperty("foo")
);

// 'bar', 'bar'
console.log(
  oldSchool.foo, newSchool.foo
);

How would I rewrite NewSchool to have the same prototyping behavior as OldSchool?

EDIT: The following does not work:

<script type="text/javascript">

    function OldSchool() {}

    OldSchool.prototype = {
        foo: "bar",
    };

    class NewSchool {}

    NewSchool.prototype = {
        foo: "bar",
    };

    let oldSchool = new OldSchool,
        newSchool = new NewSchool;

    // false, true
    console.log(
        oldSchool.hasOwnProperty("foo"),
        newSchool.hasOwnProperty("foo")
    );

    // 'bar', undefined
    console.log(
        oldSchool.foo, newSchool.foo
    );

</script>
Dan
  • 744
  • 1
  • 8
  • 23

1 Answers1

0

Have you tried using Private Instance Fields? Here is an example:

function OldSchool() {}

OldSchool.prototype = {
  foo: "bar",
};

class NewSchool {
  #foo = "bar";

  get foo() {
      return this.#foo;
  }
}

let oldSchool = new OldSchool,
    newSchool = new NewSchool;

// false, false
console.log(
  oldSchool.hasOwnProperty("foo"),
  newSchool.hasOwnProperty("foo")
);

// 'bar', 'bar'
console.log(
  oldSchool.foo, newSchool.foo
);
Mauro Aguilar
  • 1,093
  • 13
  • 22