Введите данный код в консоль. Происходит какой-то баг, нет времени вникать в суть. Может кто знает. Введите данный код в консоль браузера. 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)