169 похожих чатов

О ребят. Раз мы затронули эти темы. Кто-нибудь сможет внятно

объяснить, чем отличается prototype-based language от class-based? P.S. Возможно, ответят только челики, у которых есть опыт с языками типо Жабы.

15 ответов

2 просмотра
Elisey-Martynov Автор вопроса

Просто я для себя пытался разобраться. Как то мутновато все, в каше. У меня предположения, что это из-за того, что я серьезно работал только с жабаскриптом.

та что-то связано с тем как они прям на низком уровне создает и наследует классы, в любом случае я б вообще не парился

Elisey-Martynov Автор вопроса

вот, и я про низкий уровень. Ну для понимания хотелось бы разобраться))

В классическом наследовании ты не можешь менять поведение на лету, нет никаких цепочек прототипов, отнаследовался - всё, это новый изолированный класс. Грубо говоря, одно клонирует, другое цепляет ссылку на родителя

Elisey-Martynov Автор вопроса

Ооо. Уже интереснее

Класс — это тип, прототип — это объект. Класс не может быть изменён, прототип — может

Elisey-Martynov Автор вопроса

То есть в class-based языке ты не сможешь условно из отнаследованного класса изменить поведения Base класса? Зачем тогда в таких языках принцип тех же Барбара лисок?

ну да там же на mdn написано что связь с родителем всегда отается через _proto_

Сможешь изменить поведение базового класса в контексте текущего класса. Сам базовый класс от этого не поменяется

Elisey-Martynov Автор вопроса

Так. А условно в js'е мы это можем сделать, дойдя по цепочке прототипов до нужной штуки - верно?

Ну так принцип же не нарушается, контракт наследуемого класса сохраняется в наследнике

Принцип L касается подобных случаев class Parent { void method() { // implementation A } } class Child extends Parent { @Override void method() { //implementation B } }

Нет, ты не так понял :) Изменить ты можешь, но только в наследнике class B extends A { @Override() bar() { // new implementation } }

Создав экземпляр Child, ты будешь иметь доступ к имплементации Б. Создав Parent — к имплементации А Принцип подстановки заставляет тебя переопределять методы в детях так, чтобы имплементация Б не меняла основного поведения класса Parent

В ЖС мы можем такую еболу творить class A { foo() { return 1 } } class B extends A { foo() { return super.foo() * 2 } } A.prototype.foo = () => 10; console.log(new B().foo())

Похожие вопросы

Обсуждают сегодня

@MrMiscipitlick А можешь макрос написать, который будет вычислять смещение относительно переданных меток? Просто .label1-.label2, и вернуть значение.
КТ315
35
я не магистр хаскеля, но разве не может лейзи тип конвертнуться в не-лейзи запросив вычисление содержимого прям при инициализации?
deadgnom32 λ madao
100
А еще в перле можно уже @arr1 + @arr2?
Sergei Zhmylove
53
Подобного рода ;Следующие три строки это директивы ассемблера, ;которые можно не задавать, т.к.работаем в Visual Studio. ;Символ ";" - это начало однострочного комментария ...
Егор Анелькин
3
Кто-нибудь знает почему SPM клонирует репо целиком? Некоторые репы просто огромные, как та же swift-syntax которая нужна для использования макросов. Сначала подумал, что это...
iMike
6
Привет всем. появился вопрос. Разрабатываю сайт, в данный момент он запущен. Хостинг beget. Добавляю на сайт яндекс метрику с помощью полей client-settings (взято отсюда http...
Andrew
2
Подскажите, где смотреть результат выполнения программы? Код: ;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, станда...
Егор Анелькин
5
еще вопрос, допустим мы создадим char массив из 10 элементов и присвоим ему через сканф 10 символов. и выведем все символы. Хотел спросить последний элемент /0 будет включать...
Anthem
11
;.686 ;Система команд процессора 686 ;.MODEL FLAT,stdcall ;Модель памяти плоская, стандартный ;вызов процедуры ;option casemap:no...
Егор Анелькин
1
Где в Астане можно купить мясо для шашлыков?
Dancing Іңұқәһүғө
21
Карта сайта