博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript this讲解
阅读量:5886 次
发布时间:2019-06-19

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

this没那么复杂,其实this指向的就是他的父级obj
 
比如:
1. 
console.log(this);
在浏览器中打印出来的就是windows对象,没什么疑问
 
2.
function test(){
    var a = 1;
    console.log(this.a); 
}
test()
打印出的也是windows对象,因为test function 的上层对象是windows
 
3.
var obj = {
    a: 1,
    b: function () {
        console.log(this);
    },
    c : {
        c1: 123,
        a: 'xx',
        c2: function() {console.log(this);}
    }
}
 
obj.b();   //打印的是obj对象,因为obj.b的上层对象是obj
obj.c.c2();  //打印出的是obj.c对象,因为obj.c.c2的上层对象是obj.c
 

4. 

          
var obj = {
    a: 1,
    b: function () {
        console.log(this);
    },
    c : {
        c1: 123,
        a: 'xx',
        c2: function() {
            console.log(this);
            function test(){
                console.log('test',this);
            }
            test();
        }
    }
}
内部函数这种情况比较特殊,test function 的this指向全局,因为test在运行时才能执行,绑定的对象不可预测,丢失了上层对象
一般来说,如果想获取上层对象,可以使用that的方式,var that = this.保存上层对象

 

 
5.
     
  this 除了默认绑定到上层对象,也可以手动的进行对象绑定     
var fn = function(){
    console.log(this)
}.bind({a:1})
 
fn();
 
打印出来的this就是{a:1},注意,使用bind之后,apply/call方法就不能生效了
 

6.

        this还可以在运行时绑定上下文:即this
        var  fn = function() {
            console.log(this);
        }
        fn.call({a:1});
        fn.apply({a:1});
         
 
 
所以javascript 中的 this没那么复杂,左绕右绕,其实就是指向父级obj,找不到就绑定顶级的windows,或者手动绑定
 
 
看图说话
 
 
 
 
 
 

转载于:https://www.cnblogs.com/zhentaoo/p/6394680.html

你可能感兴趣的文章
Serv-U FTP Server 错误代码详解
查看>>
xfs 分区格式化
查看>>
洁净触手可得—LG WD-VH455D1洗衣机使用体验记
查看>>
[C#]回车键实现输入光标的切换及系统快捷键的屏蔽
查看>>
高效职业人的8大习惯
查看>>
java线程系列---synchronized详解
查看>>
PMP备考总结_9.13
查看>>
linux 网站架设调优Apache(三)
查看>>
在32位Win7下安装MySQL5.7.10安装配置过程
查看>>
squid透明代理和反向代理配置过程
查看>>
汽车常识全面介绍 - 传动系统
查看>>
vim攻略
查看>>
51CTO交流摘录(1):SOC的定义、适用性和组成
查看>>
关于数据包分析中Fragment offset(分片偏移)字段的十六进制码解读
查看>>
suse linux 安装无线网卡驱动
查看>>
jetty9系列之应用部署
查看>>
我的友情链接
查看>>
Linux:linux压缩文件解析
查看>>
OSChina 周四乱弹 ——解读揭秘动弹惨案
查看>>
Java程序员集合框架面试题
查看>>