Как я могу найти, где определен элемент объекта в Javascript?

#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(), которая следит за тем, чтобы свойству было присвоено значение, и запускает функцию, когда это происходит.