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

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

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

15 ответов

12 просмотров
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())

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

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

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта