函数运行时,自动生成的一个内部对象,只能在函数内部使用

随着函数使用场合的不同,this的值也发生着改变,但是有一个总原则:this指的是调用函数的那个对象(核心)

this对象的指向

一般情况下,我们会从以下四个方面去分析

1、纯粹的函数调用

  例如

 function test(){
this.x = 1;
alert(this.x);
this.x = 2;
}
test(); //
alert(x); //

所以在这边,this指的是全局对象global

这边还有一种情况,很多人会搞错

var x = 2;
function test(){
var x = 1;
function error(){
alert(this.x);
}
return error;
}
test(); //

这种情况下this依旧是全局对象global,因为调用它的依旧是全局对象

2、作为对象的方法调用

  例如

 var demo = {
x:1,
error : function () {
var x = 2;
alert(this.x)
}
};
demo.error(); //

这边的this指向的是对象demo

还有个迷惑性的例子

     var x = 3;
var demo = {
x:1,
error : function () {
var x = 2;
function ss(){
alert(this.x);
}
return ss;
}
};
demo.error()(); //

这边的this又指向全局对象了.....换种方式看也许更清晰

1 (demo.error())();  //把()里的看成一个函数,其实调用这个函数的还是全局对象global

或者再换种写法

 1   var x = 3;
2 var demo = {
3 x:1,
4 error : function () {
5 var x = 2;
6 function ss(){
7 alert(this.x);
8 }
9 ss(); // 3 不管函数在哪边,只要调用它是全局对象,那么this就指向全局对象
10 }
11 };
12 demo.error(); //

3、作为构造函数调用

  例如

     function test(){
this.x = 1;
}
var o = new test();
var x = 2;
alert(o.x); // 1

这边的this就指向新对象o

4、call()和apply()时

  例如

  

     var x = 3;
var o = {
x:1
};
var v = {
x:2,
test:function () {
return this.x;
}
};
alert(v.test()); // 2 this指向v
alert(v.test.call()); // 3 this指向全局
alert(v.test.call(o)); // 1 this指向o

当使用call和apply时,()中的对象是什么,this就指向什么对象

最新文章

  1. 项目实战工具类(一):PhoneUtil(手机信息相关)
  2. ason 和 Java 对象转化示例
  3. MyEclipse提示键配置、提示快捷键、提示背景色、关键字颜色、代码显示、编...
  4. php 链接access数据库
  5. 【CF】509E Pretty Song
  6. 中国大学MOOC-翁恺-C语言程序设计习题集
  7. Robot Framework用法总结
  8. PHP程序员的技术成长之路规划
  9. 虚拟机搭建CentOS主机win10通过xshell连接
  10. Nginx 入门学习教程
  11. Python任务调度模块 – APScheduler,实现定时任务
  12. C# 定时关机小程序
  13. ionic 确认提示操作框
  14. ansible的安装及基本使用
  15. 【原创】用JQury来制作星星打分特效功能
  16. SPSS-比较均值-独立样本T检验 案例解析
  17. 最小圆覆盖 gym-102006 I
  18. UCOS2系统内核讲述(三)_TCB任务控制块
  19. android 开发 - 结束所有activity
  20. [GO]tcp网络通信和实现

热门文章

  1. spring Bean类自动装载实现
  2. NYOJ--488--dfs--素数环
  3. Sublime Text3使用汇总
  4. 计蒜客模拟赛D2T1 蒜头君的兔子:矩阵快速幂
  5. volatile可见性的一些认识
  6. 为什么我们要使用Async、Await关键字
  7. react+flux编程实践(一) 基础篇
  8. 【3D数学基础】三维空间折射向量计算
  9. testng-result中文乱码问题
  10. Hadoop2 和 Hadoop1 区别