Разница между свойствами класса и прототипом функции в Javascript - PullRequest
10 голосов
/ 31 августа 2009

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

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

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

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

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

Ответы [ 3 ]

19 голосов
/ 31 августа 2009

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

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

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

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

2 голосов
/ 31 августа 2009

Языки на основе классов и прототипов @ Центр разработчиков Mozilla. Ухоженная!

1 голос
/ 31 августа 2009

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...