Если бы я сравнивал JS-классы с классами на Java, первое, что я бы сказал, это то, что JS «класс» - это просто объект, тогда как класс Java - это не.
Объект имеет свои свойства/поля/методы. Это то, что может иметь класс JS. Но класс в Java не может, только экземпляры могут.
Некоторые люди, вероятно, скажут «Подождите, но как насчет статических полей и методов? Я могу сделать статическое поле MyClass.myField
методом MyClass.doSomething()
».
Да, вы можете. Но с моей точки зрения, они просто будут «размещены» в MyClass
пространства имен, они не являются действительно свойства класса:
- У вас нет
this
в статических методах - но вы можете использовать this
методы уровня класса в JS «классы»
- Вы не можете создать класс со статическим методом для реализации определенного интерфейса - при условии, утке-вводе как интерфейс этого нет никаких проблем в JS
Так класс Java со статическими полями или методами - это просто имяp туз для этих полей и методов, не более того. То, что делает его еще более очевидным является тот факт, что в статическом методе вы не можете выяснить, какой класс вы в (без фокусов):
Getting the class name from a static method in Java
Так что в JS pseudoclasses являются первым -класса, тогда как в Java это не так.
Что вы хотите знать, что не распространяется на _prototypical vs classic inheritance_, с которым вы уже связались? – Mathletics
@Mathletics: Я считаю, что OP хочет знать разницу между «поддельными» классами в javascript (возможно, также и будущим синтаксическим сахаром) и фактическими классами, такими как реализованные на классических языках. EDIT: @ Growler: Я думаю, что все «поддельные» библиотеки классов (не говоря о будущем синтаксическом сахаре) работают несколько иначе .. Сравнение * в глубину * должно быть сделано против 1 (или каждой) конкретной библиотеки. Не могу помочь вам, так как это (по крайней мере, был фильтр хорошего качества) моей политики закрыть * любую * веб-страницу, которая говорит о «классах» в контексте javascript. – GitaarLAB
@GitaarLAB вы только что переформулировали вопрос с большим количеством слов, но не более подробно. Я хочу знать, что OP неясно, прочитав о том, как наследование работает в двух системах. В чем разница между яблоком и апельсином? Или в этом случае яблоко окрасило апельсин и апельсин? – Mathletics