Разница между свойствами класса и прототипом функции в 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 любой статический класс свойства.
Вы можете найти эти статьи полезными (хотя, может быть, немного неясными):
Ответ 2
Языки на основе классов и прототипов @Центр разработчиков Mozilla. Ухоженная!
Ответ 3
Rectangle.UNIT похож на статический член класса, тогда как Rectangle.prototype.UNIT является локальным членом. Похоже, вы хотите Rectangle.UNIT в вашем случае, потому что вам нужен только один статический экземпляр объекта.