Какая из этих деклараций прототипа лучше и почему?
Я пытаюсь решить, как настроить мои функции в прототипе моей основной библиотеки.
Должен ли я использовать:
Library.prototype.funcA = function () {.....};
Library.prototype.fucnB = function () {.....};
etc..
или
Library.prototype = {
funcA: function () {.....},
funcB: function () {.....},
etc..
};
Таким образом, в основном первый выбор добавляет все мои функции к прототипу. Второй вариант заменяет прототип объектом, содержащим все мои функции. Это имеет значение?
Ответы
Ответ 1
Я бы выбрал первый вариант.
Вы не хотите полностью заменить прототип, так как вы никогда не знаете, что было добавлено из другого проекта.
Если это что-то полностью самодостаточное, что только вы работаете, второй вариант - ok. Но по-прежнему не очень хорошая привычка вникать в это, чтобы вы не случайно отбросили какую-то функциональность, на что еще рассчитывают.
Ответ 2
В этом случае нет, это не имеет значения. Это ваш объект, и вы не пытаетесь наследовать что-либо, поэтому перезапись прототипа (в отличие от добавления к нему) не имеет значения.
В общем случае, да, это может иметь большое значение. Вы клонируете все существующие прототипы, доступные объекту. Вы не должны этого делать, если не уверены, что ваш код владеет данным объектом. И наоборот, добавление методов к прототипу требует также мысли; другие объекты могут совместно использовать прототип с объектом, прототип которого вы изменяете.
Ответ 3
Это имеет значение. Вы должны заметить, что prototype
- это объект. Итак, ваше утверждение "Второй вариант заменяет прототип объектом, содержащим все мои функции". false. Это просто reset объект-прототип.
Итак, используя:
Library.prototype = {
funcA: function () {.....},
funcB: function () {.....},
etc..
};
Быстрее, но вы удаляете все функции прототипа, которые у вас были до этого назначения, в то время как:
Library.prototype.funcA
добавляет свойства.
Итак, если вам нужно добавить свойство (не удалять его), используйте:
Library.prototype.funcA
Else, назначьте объект.
Ответ 4
Если Library
имеет свойства/методы прототипов, которые вы не хотите потерять, вы захотите добавить их с помощью дополнения уже существующего прототипа. В противном случае это действительно зависит от личных предпочтений. Мне нравится второй метод, потому что он выглядит более чистым, но я использовал оба в своем коде.