Цитата:
Цитата:
function X() {alert(1)} X.prototype = { y: function() {alert(2)} }; X.y = function() {alert(3)}; X.Y = function Y() {alert(4)} X.Y.prototype = { y: function() {alert(5)} }; X.Y.y = function() {alert(6)}; new X(); // или new X new X().y(); X.y(); new X.Y(); // или new X.Y new X.Y().y(); X.Y.y(); Вот тоже самое, но только с синтаксисом класса... Здесь трудно перепутать вложенный класс со статичным методом класса. class X { constructor(){alert(1)} y(){alert(2)} static y(){alert(3)} } X.Y = class Y { constructor(){alert(4)} y(){alert(5)} static y(){alert(6)} }; new X(); // или new X new X().y(); X.y(); new X.Y(); // или new X.Y new X.Y().y(); X.Y.y(); Синтаксис класса является более предпочтительным в языке программирования JavaScript. |
Спасибо за оба примера. Мне по душе 1 вариант написания. Но я так и не понял, а зачем в javascript часто разработчики используют вложенные классы?
И все же в первом варианте у вас используются скобки, а я хотел бы добиться такого вызова: new X.Y; |
Цитата:
Например, у вас есть класс Field описывающий какое-то абстрактное поле: class Field { constructor(width, length) { this.width = width; this.length = length; } } У поля есть заданные и неизменяемые длина и ширина. Теперь у вам необходимо создать класс Point, описывающий какую-либо точку на поле, и вы думаете: точка на поле не отделима от поля, но точка в общем может использоваться ещё где-нибудь, так зачем же создавать глобальную сущность, которая бы не позволила вложить смысл, например, точке в пространстве? И правильно думаете. И делаете вложенный класс... class Field { constructor(width, length) { this.width = width; this.length = length; } } Field.Point = class Point { constructor(x, y) { this.x = x; this.y = y; } }; Вложенный класс - способ представления данных. У вас теперь логически один класс в иерархии относится к другому. Т.е. создание полей и точек теперь будет выглядеть так... const field = new Field(400, 400); const p = new Field.Point(25, 50); Теперь все, кто увидят такую иерархию будут понимать, что Point используется вместе с Field. Цитата:
|
Понял теперь. А есть книги в которых об этом пишут? О том как организовывать большие классы, как их правильно структурировать и прочее?
|
Часовой пояс GMT +3, время: 13:32. |