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