Видимо это идиома в JavaScript для реализации методов экземпляра класса, основанным на этом пути:функция MyClass() {...}; MyClass.prototype = MyClass; - считается вредным?
function MyClass(){...}
MyClass.prototype.methodA = function(){...}
MyClass.prototype.methodB = function(){...}
...
Почему люди не использующие эту компактнее форму вместо:
function MyClass(){...}
MyClass.prototype = MyClass;
MyClass.methodA = function(){...}
MyClass.methodB = function(){...}
Это, очевидно, не работает, если MyClass должен наследовать некоторый базовый класс (в этом случае обычно нужно установить прототип для нового экземпляра базового класса).
Однако в наши дни глубокие иерархии наследования становятся редкими (благодаря утиной печати и миксинам среди прочего).
Я что-то упустил?
MyClass.prototype = MyClass делает .constuctor более беспорядочным, чем он есть?
Неправильно ли это происходит с помощью typeof или instanceof или даже getPrototypeOf()?
Должно ли оно поощряться или считаться вредным?
Да, это то, что я раньше делал. Однако добавленный уровень отступов, «я», с которым я некоторое время перепутал, и тот факт, что я иногда интерпретирую функции интермедиации с аннотацией метапрограмм ... сделал меня неудобным с этим стилем (я вернулся к классической идиоматике .prototype, пока Я выясняю новое решение) – JeanHuguesRobert
BTW: Я не понимаю «потенциальную проблему», о которой вы упоминаете, не могли бы вы рассказать об этом? Благодарю. – JeanHuguesRobert
Класс Function в Javascript имеет кучу методов на собственном прототипе объекта. Если вы добавите методы и т. Д. К объекту функции, вы не сможете использовать их из этого экземпляра. Другими словами, если вы добавите метод «вызов» вашему прототипу, то ничего не сможет сделать «MyConstructor.call (...)» и получить ожидаемый результат. – Pointy