#javascript
#javascript
Вопрос:
Во многих библиотеках я видел методы, определенные подобным образом
Common.deepCopy = Common.deepCopy || function(oldObject) {
return $.extend(true, {}, oldObject);
};
Для чего нужны методы определения объектов, подобных этому.
Поскольку файлы js будут выполнены только один раз, поэтому нет шансов, что deepCopy был определен ранее.
Комментарии:
1. Что, если другая библиотека реализует именно этот метод? Тогда проверка имеет смысл, imo..
Ответ №1:
Это на тот случай, если она уже была определена в другом файле, или если скрипт выполняется более одного раза.
Ответ №2:
Это не всегда так. Вы никогда не знаете, включен ли файл JS дважды или он инициализирован снова. Лучше проверить, существует ли объект, и назначить его, если он существует. В противном случае создайте новый объект
Ответ №3:
Часто это делается для того, чтобы проверить, существует ли что-то уже в среде или нет, например Array.prototype.indexOf
. В oldIE этого не существует.
var indexOf = [].indexOf ? fn : fn2
Теперь вы могли бы определить fn для использования собственного indexOf, а затем использовать fn2 для сред, которые его не поддерживают.
Так лучше, чтобы вам не приходилось проверять каждый раз, когда вы вызываете функцию — вместо этого вы проверяете, когда вы ее определяете.