js中的this的指向的

1.下面这段代码中后面的一些结果不太能理解,希望能有人解释解释呢,谢谢。

            var name = 'window';
            var person1 = {
                name:'person1',
                show1:function(){
                    console.log(this.name)},
                show2:() => console.log(this.name),
                show3:function(){
                    return function(){
                        console.log(this.name)}
                },
                show4:function(){
                    return () => console.log(this.name)}
            };            
            var person2 = {name:'person2'}    

//这里能理解此时show1()中的this指向person1的实例对象,因此name就是person1    
            person1.show1();             //person1
//call改变了this的指向,使person2中也有了show1()函数,因此name就是person2
            person1.show1.call(person2); //person2

//这里后面的都看不大明白,望指导……        
            person1.show2();              //window
            person1.show2.call(person2);  //widnow
            
            person1.show3()();            //window
            person1.show3().call(person2); //person2
            person1.show3.call(person2)(); //window
            
            person1.show4()();            //person1
            person1.show4().call(person2);//person1
            person1.show4.call(person2)();//person2
阅读 2.5k
3 个回答

1、this指向在箭头函数中与当时的上下文this绑定,并且不管在哪儿,以什么方式调用都不会被更改。
因此show2的所有调用返回的都是window。详见http://es6.ruanyifeng.com/#do...箭头函数
2、person1.show3()(); 你这么看就明白了。person1.show3()返回的是function(){console.log(this.name)} 。然后person1.show3()()就相当于 (function(){console.log(this.name)})()。。然后后面的都属于这两种。自己体会下吧。

箭头函数会捕获其所在上下文的 this 值,作为自己的 this 值,call() 或 apply()对 this并没有影响

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题