博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
你不知道的this指向
阅读量:6196 次
发布时间:2019-06-21

本文共 1426 字,大约阅读时间需要 4 分钟。

javascript中,我们预想的this指向,有时候与预期不一样,直接上经典例子

    window.name=2;    var test={            'name':1,            'getName':function(){          console.log(this.name);//输出1             return function(){               console.log(this.name);//输出2                }            }        }        test.getName()();

 

  上面为最经典的一个this指向解析案例,第一个this指向test对象,第二个this指向window全局对象,第一个console运行的是test对象里面的方法 ,第二个console运行的是一个匿名函数(也可以称为普通函数)在JavaScript中普通函数的this指向的是全局对象的,上面字面量的创建test对象隐含着new关键词,整个test是一个新的对象,getName属于test里面的方法,this会指向test对象,而getName里面return的函数,属于一个普通函数,这个函数里的this会指向window全局,

ps:其实还可以用闭包的解析,我个人觉得如果这个没弄明白,再提闭包会让人更加迷惘。

假设你想把第二对象指向test,可以使用call在调用时候改变

window.name=2;    var test={            'name':1,            'getName':function(){                  console.log(this.name);                return function(){                    console.log(this.name);                }            }        }        test.getName().call(test); //输出1,1        test.getName().apply(test); //输出1,1

还有一个改变this对象的方法,在test里面的方法嵌套函数之前,先把test对象(指向test的this)用变量的方式保存下来,下面的案例代码

window.name=2;    var test={            'name':1,            'getName':function(){                var that=this;//预先把指向test的this保存到that变量中             console.log(this.name);//输出1                return function(){                    console.log(that.name);//输出1                }            }        }        test.getName()();

 

转载于:https://www.cnblogs.com/linxianzuo/p/6244009.html

你可能感兴趣的文章
第五次作业
查看>>
现代C++之理解模板类型推断(template type deduction)
查看>>
Ferris教程学习笔记:js示例2.14 单一按钮显示/隐藏 乐曲播放列表
查看>>
电子商务 javaweb b2b b2c o2o 平台
查看>>
喜马拉雅
查看>>
aoj0118
查看>>
NOIP2017 赛后总结
查看>>
C#获取当前日期时间(转)
查看>>
java的Swing编程====实现鼠标双击一下==画图===getMouseClicked的方法
查看>>
30个有关Python的小技巧
查看>>
虚拟环境virtualenv
查看>>
[C#] Image 與 byte[] 互轉
查看>>
关于我
查看>>
读入输出优化
查看>>
宁远语录
查看>>
应用从Oracle迁移至SQLServer时SQL转换
查看>>
TCP的三次握手和四次挥手
查看>>
java的集合框架最全详解(图)
查看>>
JadClipse 安装
查看>>
软件工程(2018)团体第四次作业
查看>>