Разница между свойствами класса и прототипом функции в Javascript

Мне нравится узнать разницу между свойством класса и прототипом в Javascript, что я имею в виду, показано в коде:

function Rectangle(x, y) {
    this.width = x;
    this.height = y;
}

Rectangle.UNIT = new Rectangle(1, 1);

Rectangle.prototype.UNIT = new Rectangle(1, 1);

Я знаю, что прототип работает как объект inherit, что означает, что UNIT будет показываться со всех экземпляров, но Rectangle.UNIT = new Rectangle(1, 1); код не делает то же самое?

Ответ 1

Rectangle.UNIT - это свойство класса static. Его можно получить только в объекте класса Rectangle. Он не будет доступен ни в одном из случаев Rectangle.

Rectangle.prototype.UNIT является свойством прототипа и может быть доступен для экземпляров Rectangle.

Если вы создадите класс Square, который наследует от Rectangle, любые экземпляры Square будут совместно использовать одно и то же свойство прототипа, но not любой статический класс свойства.

Вы можете найти эти статьи полезными (хотя, может быть, немного неясными):

Ответ 3

Rectangle.UNIT похож на статический член класса, тогда как Rectangle.prototype.UNIT является локальным членом. Похоже, вы хотите Rectangle.UNIT в вашем случае, потому что вам нужен только один статический экземпляр объекта.