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

Я нашел это определение здесь : https://medium.com/javascript-scene/10-interview-questions-every-javascript-developer-should-know-6fa6bdf5ad95#.y0nc8kx34

звучит неудобно для вас ? Имеет ли это определение смысл ? Для меня в обоих случаях используется конструктор (с new вы можете переопределить возвращаемый объект, вот и все), и в обоих случаях есть наследование прототипа. Я что-то упускаю или определение выше не совсем точное ?

*3. В чем разница между классическим наследованием и прототипным наследованием?

Наследование Классов: экземпляры наследуются от классов (например, чертеж - описание класса) и создают отношения подклассов: иерархические таксономии классов. Экземпляры обычно создаются с помощью функций конструктора с помощью new ключевое слово. Наследование класса может или не может использовать class ключевое слово from ЕС6.

Прототипного Наследования: экземпляры наследуются непосредственно от других объектов. Экземпляры обычно создаются с помощью заводских функций или Object.create(). Экземпляры могут состоять из множества различных объектов, что позволяет легко выборочного наследования.*

2 ответов


в JavaScript наследование классов реализовано поверх прототипного наследования,но это не значит, что он делает то же самое:

в дополнение к наследованию свойств наследование класса делает дополнительную проводку для связи дочернего [[прототипа]] с родительским [[прототипа]]. Обычно super() конструктор также называют. Эти дополнительные шаги формируют родительские / дочерние иерархии и создают самую плотную связь, доступную в дизайне OO.

отсюда, "Классы наследуются от классов и создать отношения подклассов: иерархические таксономии классов."

также полезно понять, что существует несколько типов прототипов OO. Главное, есть конкатенативный наследство и делегация прототип.

Конкатенативный наследства является важным, потому что позволяет очень легко (и очень часто) состав объекта в JavaScript. Вспомните "Банды Четырех", - сказал, "предпочтение композиции объектов над наследованием классов."

Это общепринятая мудрость дизайна OO, и из-за конкатенативного наследования это легко сделать в JavaScript.

для получения более подробной информации см. "мастер интервью JavaScript: в чем разница между классом и прототипным наследованием?"


здесь интерфейс и семантический различия между "классом"и " прототипом".

разница в интерфейсе

Как использовать его в коде. Разница и преимущества хорошо объяснены в статье.