1.什么是this?
定义:调用函数时,call后面的第一个值
2.如何找到this?
由定义可知,this就是call后面的第一个值,只要确定了call后面的值,即可找到this。换句话说,只需要把函数调用改成带有call的调用即可
3.函数的调用
fn1 = function(x,y){
return x+y
}
fn1(x,y)//调用fn
以上调用写法等同于
fn1.call(undefined,x,y)
你会发现同上面的写法相比,多了个参数undefined。当你用第一种写法调用函数时,实际上就是默认第一个参数是undefined
根据定义,call后面的第一个值为this的值,即为undefined。但是,如果你console.log(this) 出来,打印结果却是window。至于原因,是因为浏览器规则规定的——非严格模式下,函数第一个参数如果是undefined,对象即为window,严格模式下才是undefined。记住,值是undefined,打印结果是window,这是两码事
var person = {
skill:function{
console.log('writing')
}
}
person.skill()
同理,上述调用可以改写为
person.skill.call(person)//为什么这么写,去问js之父吧
根据定义,call后面的第一个值为this的值,即为person
补充:箭头函数内外this不变