Разница между классическим наследованием и наследованием прототипов
Я нашел это определение здесь : 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: в чем разница между классом и прототипным наследованием?"
здесь интерфейс и семантический различия между "классом"и " прототипом".
разница в интерфейсе
Как использовать его в коде. Разница и преимущества хорошо объяснены в статье.