document.body.scrollTop = 10Object.defineProperty(document.body, "scrollTop", {
     set: function(){
         console.trace("Updating scrollTop")
     }
})var scrollTop = document.body.scrollTop;
Object.defineProperty(document.body, "scrollTop", {
     set: function(value){
         console.trace("Updating scrollTop")
         scrollTop = value;
     }
})var scrollTop = document.body.scrollTop;
Object.defineProperty(document.body, "scrollTop", {
     set: function(value){
         console.trace("Updating scrollTop")
         scrollTop = value;
     },
     get: function(){
         return scrollTop
     }
})var obj = {name: "Emma"}
Object.getOwnPropertyDescriptor(obj, "name")
// =>
{
    value: "Emma",
    writable: true,
    enumerable: true,
    configurable: true
}obj = {}
Object.defineProperty(obj, "name", {
    get: function(){
        return "Emma"
    }
})
Object.getOwnPropertyDescriptor(obj, "name")
// =>
{
    configurable: false,
    enumerable: false,
    get: function(){...}
    set: undefined
}Object.getOwnPropertyDescriptor(document.body, "scrollTop")
// => undefinedvar obj = document.body
obj = Object.getPrototypeOf(obj)
console.log(obj)
// => HTMLBodyElement
Object.getOwnPropertyDescriptor(obj, "scrollTop")
// => undefinedvar obj = document.body
obj = Object.getPrototypeOf(obj)
obj = Object.getPrototypeOf(obj)
// => HTMLElement
Object.getOwnPropertyDescriptor(obj, "scrollTop")
// => undefinedvar obj = document.body
obj = Object.getPrototypeOf(obj)
obj = Object.getPrototypeOf(obj)
obj = Object.getPrototypeOf(obj)
// => Element
Object.getOwnPropertyDescriptor(obj, "scrollTop")
// =>
{
    enumerable: true,
    configurable: true,
    get: function(){...},
    set: function(){...}
}var obj = document.body
obj = Object.getPrototypeOf(obj)
obj = Object.getPrototypeOf(obj)
obj = Object.getPrototypeOf(obj)
obj === Element.prototype
// trueObject.defineProperty(document.body, "scrollTop", {
     set: function(value){
         console.trace("Setting scrollTop value to", value)
         var descr = Object.getOwnPropertyDescriptor(
              Element.prototype, "scrollTop")
         return descr.set(value)
     }
})
document.body.scrollTop = 10Object.defineProperty(document.body, "scrollTop", {
     set: function(value){
         console.trace("Setting scrollTop value to", value)
         var descr = Object.getOwnPropertyDescriptor(
              Element.prototype, "scrollTop");
         return descr.set.apply(document.body, [value]);
     }
})
document.body.scrollTop = 10