@daniil14056

Объект Window и страница html получили доступ к консоли?

Введите данный код в консоль. Происходит какой-то баг, нет времени вникать в суть. Может кто знает. Введите данный код в консоль браузера. ENTER; Затем введите user.pass.dfsd И после user.pass.(точка) пишите любой текст не отправляя команду (не нажимая enter) и вы увидите, что при вводе нового символа у вас вылетает console.log() из сеттера. Почему так происходит. Ведь мы просто вводим текст в поле которое не имеет ни каких связей с window-обьектом. Как получилось связать редактор и страницу html??? Как будто обработчик событий повесели прям на ввод консоли.

function observerWatch(obj, prop , fn)
{
	var lastValue=this[prop];
		
	Object.defineProperty(obj , prop , {
			
			set: function(value){
                               lastValue=value;
				fn(value); // выполнить при изменении значения
			},
			get: function(){ 
                                   console.log("Этот консоль.лог будет по непонятным причинам выскакивать"); 
				return lastValue;
			}
		})	
}
Object.prototype.watch=function(name, fn){
	console.log(name, this);
        return  observerWatch.call(null, this, name,  fn); // можно и без .call
    };
user={name: "user1"}
user.pass={   //  Объект
                    pass:"password",
                    salt:"secret"}
user.watch('pass', ()=>{console.log("set");})
//  user.pass.dfsdfsd // вводим посимвольно этот текс и дивимся (chrome)
  • Вопрос задан
  • 200 просмотров
Пригласить эксперта
Ответы на вопрос 1
alexey-m-ukolov
@alexey-m-ukolov Куратор тега JavaScript
Ага, прям бажище. Такой бажина, что его прям аж на MDN задокументировали.

Как будто обработчик событий повесели прям на ввод консоли.
Object.prototype.watch
Действительно, похоже на то!
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы