The usage of 
  is wrong in itself. The first parameter of  call  and  apply  is the  this  passed to it when the target function is called. You use this to pass the function to  this  to  call  or  apply , so it's wrong, but just happens to support this calling method in the first way. 
 
 you need to figure out the function and difference between  call ()  and  apply () , both of which change the direction of the  this  object. For example: 
var obj = {
   name:"abcd"
}
function fn1(){
    console.log(this.name);//undefined
}
function fn2(){
   fn1.call(obj,null);
   console.log(this.name);//abcd
}
 replacing  call  with  apply  has the same result. The difference between the two is that the passed parameter, the first parameter is the object to be changed, the second parameter is different,  call  passes an array item parameter,  apply  passes an array parameter, or it can be the function's  arguments  object. For example, 
var obj2 = {
    name:'abcd',
    sex:'xx'
}
function fn1(name,sex){
  return name + sex;
}
function fn2(){
   return fn1.apply(obj2,['hhh','male']);//hhhmale
}
 both methods are non-inherited. 
  thanks for inviting ~ you can read these two articles, and then look back at your own questions, which should answer your questions. 
  JS Magic Hall: get to know Function.prototype.call  
  interviewer asked: can you simulate the call and apply methods of JS