06this面试题
想要理解this,你可以先记住以下两点:
1:this永远指向一个对象;
2:this的指向完全取决于函数调用的位置;
- 函数直接调用 fun() === fun.call(window)
- 函数作为对象方法进行调用 a.say() === a.say.call(a)
- 一句话就近原则下,谁调用this就指向谁
var name = 222;
var a = {
name:111,
say:function () {
console.log(this.name)
}
}
var fun = a.say
fun() //函数直接调用 fun.call(window) //222
a.say() //函数作为对象方法进行调用 a.say.call(a) //111
var b = {
name:333,
say:function (fn) {
fn.call(this)//333
fn() //222 //a.say传入的参数是function () {console.log(this.name)} 函数直接调用fn.call(window)
}
}
b.say(a.say)
b.say = a.say //b的say属性指向变为a的say属性的函数
b.say() //333 b.say.call(b)
补充: