推荐博客:https://www.cnblogs.com/huaxili/p/5407559.html

this是JavaScript的一个关键字,表示的不是对象本身,而是指被调用的上文。

主要用于以下四种环境:

1.直接调用,表示的是全局对象,window

2.作为对象方法被调用,表示的是该对象

3.作为构造函数被调用,表示的是创建的实例

4.可以使用apply(),call()改变this的表示对象,第一个参数就是this

1.直接调用,表示的是全局对象,window:

调用函数的结果是1,即this指的是全局对象,window,所以count值为全局变量的值

var count = 1;
function func(){
console.log(this.count);
}
func(); //1

2.作为对象方法被调用,表示的是该对象:

func()方法作为对象的方法被调用,此时this表示的被调用的对象obj,所以count值为obj对象中的值count,若是对象obj中没有count属性,则为undefined

var count = 1;
function func(){
console.log(this.count);
} var obj = {};
obj.count = 2;
obj.show = func; obj.show(); //2

3.作为构造函数被调用,表示的是创建的实例:

func()作为构造函数,创建了他的实例,此时this表示的是创建的实例Func

var count = 1;
function func(){
this.count = 2;
} var Func = new func();
console.log(count); //1
console.log(Func.count); //2

4.可以使用apply(),call()改变this的表示对象,第一个参数就是this:

apply()是函数对象的一个方法,它的作用是改变函数的调用对象(实则是将某某对象的某个方法放到另一个好基友对象那里去执行),它的第一个参数就表示改变后的调用这个函数的对象。因此,this指的就是这第一个参数。同call()

可以使用apply()或是call()来改变this指向。此时this表示的是obj对象

var count = 1;
function func(){
console.log(this.count);
} var obj = {};
obj.count = 2; func.call(); //1
func.call(obj); //2

5.嵌套函数作用域中的this:

嵌套函数被调用时并没有继承被嵌套函数的this引用,在嵌套函数被调用时,this指向全局对象。在有些应用中,我们需要在嵌套函数中读取调用被嵌套函数的对象的属性,此时可以声明一个局部变量保存this引用,

var count = 1;
function func(){
console.log(this.count); function func2(){
console.log(this.count);
} func2();
} var obj = {};
obj.count = 2;
obj.show = func; obj.show(); //2,1

此时,嵌套函数与被嵌套函数中的this都表示了obj对象。

var count = 1;
function func(){
console.log(this.count); var self = this;
function func2(){
console.log(self.count);
} func2();
} var obj = {};
obj.count = 2;
obj.show = func; obj.show(); //2,2

最新文章

  1. php 对象中连贯执行方法
  2. 洛谷P3392 涂国旗
  3. Java Servlet与Web容器之间的关系
  4. 入口点函数的19种消息,AcRxArxApp只处理16种。
  5. Hadoop-2.6.0 集群的 安装与配置
  6. cocos2d-x 如何保持屏幕常亮
  7. TIMESTAMP 与 explicit_defaults_for_timestamp
  8. shell编程控制结构:expr、let、for、while、until、shift、if、case、break、continue、功能、select
  9. super 与 this 同时使用问题
  10. IntelliJ IDEA 配置 smartGit
  11. GIT入门笔记(16)- 分支创建和管理
  12. day2 购物车
  13. 练习 HashSet 去重复
  14. http协议、web服务器、并发服务器(上)
  15. [NOI2015]寿司晚宴(状压dp)
  16. python入门第二天
  17. JavaWeb学习总结(三)——Tomcat服务器学习和使用
  18. rename批量修改文件并在后缀前加字段
  19. About The Algorithm Simplification
  20. SpringBoot和SpringCloud配置

热门文章

  1. Android 最简单的测试UI卡顿
  2. c/c++ 继承与多态 文本查询的小例子(非智能指针版本)
  3. java倒计时三种简单实现方式
  4. Elimination Game题解
  5. android申请多个权限的正确姿势
  6. Help is needed for Dexter UVA - 11384(二分)
  7. QTableWidget class
  8. C#创建安装、卸载部署程序
  9. 在IIS上搭建Exceptionless日志收集框架
  10. Vue 环境搭建(win10)