Подтвердить что ты не робот

Какая из этих деклараций прототипа лучше и почему?

Я пытаюсь решить, как настроить мои функции в прототипе моей основной библиотеки.

Должен ли я использовать:

Library.prototype.funcA = function () {.....};
Library.prototype.fucnB = function () {.....};
etc..

или

Library.prototype = {
    funcA: function () {.....},
    funcB: function () {.....},
    etc..
};

Таким образом, в основном первый выбор добавляет все мои функции к прототипу. Второй вариант заменяет прототип объектом, содержащим все мои функции. Это имеет значение?

4b9b3361

Ответ 1

Я бы выбрал первый вариант.

Вы не хотите полностью заменить прототип, так как вы никогда не знаете, что было добавлено из другого проекта.

Если это что-то полностью самодостаточное, что только вы работаете, второй вариант - ok. Но по-прежнему не очень хорошая привычка вникать в это, чтобы вы не случайно отбросили какую-то функциональность, на что еще рассчитывают.

Ответ 2

В этом случае нет, это не имеет значения. Это ваш объект, и вы не пытаетесь наследовать что-либо, поэтому перезапись прототипа (в отличие от добавления к нему) не имеет значения.

В общем случае, да, это может иметь большое значение. Вы клонируете все существующие прототипы, доступные объекту. Вы не должны этого делать, если не уверены, что ваш код владеет данным объектом. И наоборот, добавление методов к прототипу требует также мысли; другие объекты могут совместно использовать прототип с объектом, прототип которого вы изменяете.

Ответ 3

Это имеет значение. Вы должны заметить, что prototype - это объект. Итак, ваше утверждение "Второй вариант заменяет прототип объектом, содержащим все мои функции". false. Это просто reset объект-прототип.

Итак, используя:

Library.prototype = {
    funcA: function () {.....},
    funcB: function () {.....},
    etc..
};

Быстрее, но вы удаляете все функции прототипа, которые у вас были до этого назначения, в то время как:

Library.prototype.funcA

добавляет свойства.

Итак, если вам нужно добавить свойство (не удалять его), используйте:

Library.prototype.funcA

Else, назначьте объект.

Ответ 4

Если Library имеет свойства/методы прототипов, которые вы не хотите потерять, вы захотите добавить их с помощью дополнения уже существующего прототипа. В противном случае это действительно зависит от личных предпочтений. Мне нравится второй метод, потому что он выглядит более чистым, но я использовал оба в своем коде.