I'm having a doubt about the this reference to object and global scope. I know that a method inside an object is refering to the object who contains that function. And that a normal function will refer to the window object. But for some reason it changes depending on how i write it. At least in this code:
this.name = 'global scope'
function log() {
  console.log(this.name);
}
const obj1 = {
  name: 'obj1 scope',
  objlog1: function() {
    console.log(this.name);
  },
  objlog2() {
    console.log(this.name);
  },
  objlog3: log,
  objlog4: function() {
    log()
  },
  objlog5: log()
}
obj1.objlog1(); //obj1 scope
obj1.objlog2(); //obj1 scope
obj1.objlog3(); // obj1 scope
obj1.objlog4(); // global scope
obj1.objlog5 // it executes before i call it for some reason? global scope.obj1,2,3, is all ok because it marks the obj1 scope. But the obj4 marks the global scope (and it's just a function that calls another function, should be as obj3, right?) and the objlog5 is even executed before I call it (I think it has to be something related to the ()).
Sorry if this sounds very 'newbie' question, but I'm having trouble understanding the this.
 
    