初识this

176 阅读1分钟

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不变