var obj = {}; obj.log = console.log; obj.log.call(console,this);
该代码在浏览器中执行,输出的日志结果是什么?
var obj = {}; // 这里重写log函数,让它打印出this的指向和传入的内容 function mylog(str){ console.log(this, str); } obj.log = mylog; obj.log.call(console, this) // console, window这样写,就可以清晰的看出来,打印的第一个,是通过call将mylog函数的this指向了console
let obj = {} // example1 function fn(e){ console.log('传参',e) // 传参 window{} console.log('内部',this) // 内部 {} } fn.call(obj, this) // example2 let o = { foo:function(){ function fn(e){ console.log('传参',e) // 传参 {foo: ƒ} console.log('内部',this) // 内部 {} } fn.call(obj,this) } } o.foo()fn(e){}
因为call方法的特性 Function.prototype.call() - JavaScript | MDN (mozilla.org)
这里最后一行代码可以直接看作
console.log(this)
this是从外面传入的
即 window