#javascript #find
#javascript #Найти
Вопрос:
Конечно, в большинстве случаев я могу просто выполнить поиск по идентификатору и просмотреть все его экземпляры. Часто поиск по «=» или » :» приводит к ответу быстрее всего.
Но этот метод терпит неудачу в ситуациях, подобных этой:
// untested javascript:
function AddMemberToObject(object, value, memberName) {
object[memberName] = value;
}
var myObj = {}
// 3,000 references to myObj
// ... somewhere else
var mysteryString = thisMethodCallsAnotherMethodCallsAnotherMethodEtc();
AddMemberToObject(myObj, someFunction, mysteryString);
// 3,000 more references to myObj
Допустим, я еще не обнаружил приведенный выше код. Как показано в этом примере, некоторые вещи, которые затрудняют поиск того, где определен элемент, включают:
- на объект, к которому нужно добавить элемент, ссылаются много раз
- имя добавляемого элемента указано далеко от того места, где элемент добавляется к объекту. Что еще хуже, он может быть сгенерирован динамически, даже сгенерирован на сервере, и в этом случае имя элемента не будет отображаться в исходном коде js.
Каковы некоторые методы для определения того, где элемент добавляется к объекту в сложных случаях, подобных этому? Есть ли способ сделать это во время выполнения (например, заставить все добавления к объекту запускать событие, которое мы можем прослушивать и прерывать в отладчике)?
Ответ №1:
Firefox имеет нестандартную функцию watch(), которая следит за тем, чтобы свойству было присвоено значение, и запускает функцию, когда это происходит.