var obj = {
value: 1
}
var test = {
value: 2,
aaa: function (num, num2) {
console.log(this);
console.log(this.value + '---' + num + '---' + num2)
}
}
test.aaa.call(obj, 111, 222) //此时的aaa中打印的this:{value: 1}
//1---111---222
//call 改变this指向
Function.prototype.myCall = function (object) {
var obj = object || window
//谁调用myCall谁就是this this是一个函数
//将函数添加到传入的obj中 也就是将函数设为对象的属性
obj.fn = this
//取参数 第一个参数是对象所以不取
var args = [...arguments].slice(1)
//调用对象中的属性 此时函数obj.fn中的this就是object
var result = obj.fn(...args)
delete obj.fn
return result
}
test.aaa.myCall(obj, 111, 222) //此时的aaa中打印的this:{value: 1, fn: ƒ}
//1---111---222