SOURCE

var name = '时间跳跃';
var state = {
name: 'yf.lin'
};
function fn(a, b) {
    console.log(a + b + this.name); 
};
// fn()
// fn.call(obj)


Function.prototype.myCall = function(obj) {
  obj = obj || window
  obj.fn = this
  const args = [...arguments].slice(1)
  const result = obj.fn(...args)
  delete obj.fn
  return result
}
fn.myCall(state,"我的","名字")
fn.myCall(null,"我的","名字")


// apply
// Function.prototype.myApply = function(obj) {
//   obj = obj || window
//   obj.fn = this
//   let result
//   // 处理参数和 call 有区别
//   if (arguments[1]) {
//     result = obj.fn(...arguments[1])
//   } else {
//     result = obj.fn()
//   }
//   delete obj.fn
//   return result
// }

// fn.myApply(state,["我的","名字"])



console 命令行工具 X clear

                    
>
console