Вопрос с точки зрения дизайна языка.
Я должен немного объяснить ситуацию. Я работаю над вариантом javascript, который не поддерживает прототипы, однако он запоздал с приличной системой типов (самое главное, поддержка instanceof). Спецификация ecmascript не важна, поэтому у меня есть свобода реализовать что-то другое и лучше подходящее.
В варианте:-
- Вы не объявляете конструкторы с помощью
function foo()
, а конструкторы объявляются в файлах шаблонов, что означает, что конструкторы существуют в пространстве имен (определяется путем к файлу) - В настоящее время все наследование поведения осуществляется путем применения шаблонов, что означает, что все общие функции копируются в каждый отдельный объект (в конце концов, прототипов нет).
Поскольку я никогда не был веб-разработчиком, это ставит меня в немного странное положение: я никогда не использовал прототипы в гневе. Хотя это не помешало мне иметь о них мнение.
Мои основные проблемы с моделью-прототипом, как я понимаю,
- ненужное захламление пространства имен объектов, obj.prototype, obj.constructor (это незрелое возражение, попытка сохранить возможность рассматривать объекты как карты, которыми они, возможно, не являются?)
- возможность изменять общее поведение во время выполнения кажется ненужной, когда прямое использование дополнительного уровня косвенности было бы более прямолинейным
obj.shared.foo()
. В частности, это довольно большая головная боль реализации - люди, похоже, не очень хорошо понимают прототипы, например. различие между прототипом и конструктором.
Поэтому, чтобы обойти это, моя идея состоит в том, чтобы иметь специальный оператор конструкторов. В основном принцип заключается в том, что каждый объект имеет список конструкторов, к которым иногда вам может понадобиться доступ.
var x = new com.acme.X();
com.acme.Y(x,[]); // apply y
(constructorsof x) // [com.acme.Y,com.acme.X,Object];
x instanceof com.acme.X; // true
x instanceof com.acme.Y; // true
Все отзывы приветствуются, я понимаю, что, возможно, трудно оценить мой POV, так как я многое пытаюсь донести, но это важное решение, и мнение эксперта может быть неоценимым.
- все, что может улучшить мое понимание модели-прототипа, хороших и плохих.
- мысли по моему предложению
спасибо,
Майк
edit: предложение, надеюсь, теперь имеет смысл.