?

Log in

No account? Create an account

Previous Entry Поделиться Next Entry
Поиск в коде места изменения свойства объекта JS
Медвед
kolyaseg
Бывают такие ситуации, когда ну вот никак не удается понять, где происходит некоторое действие или событие, например, изменение свойства объекта. Вот как раз у меня такой случай в очередной раз произошел. Где-то кто-то делает объект видимым, т.е. устанавливает его свойство "visible" в true. Я перелопатил массу кода, оттрейсил (console.log) все что только можно, но так и не смог найти места, где это происходит. Только в логе по onEnterFrame вижу, что до определенного момента было false, a потом стало true. Наверняка для поиска такой хрени есть какие-то инструменты, но о них я не знаю и пользуюсь таким приемом...

Для нужного свойства мы переопределяем сеттер и геттер и в сеттере совершаем какую-то ошибку, например делаем сложение с необъявленной переменой:

Object.defineProperties(MyVObject.prototype,
{
    visible:
    {
        get: function()
        {
            return this.__visible;
        }
	,
	set: function(value)
	{
		console.log("MyVObject visible set", value);
			
		if(value)
		{
			var a = b + 7;		// переменная b не объявлена и ее использование вызовет ReferenceError
		}
		this.__visible = value;
	}	
    }
});


Теперь при установке свойства объекта в true сработает ошибка, которую покажет консоль и мы сможем увидеть весь путь вызовов функций и методов, который привел к этой ошибке. Профит.