首页 > 编程语言 > 详细

javascript this讲解

时间:2017-02-13 18:32:33      阅读:116      评论:0      收藏:0      [点我收藏+]
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,或者手动绑定
 
 
看图说话
 技术分享
 
 
 
 
 

javascript this讲解

原文:http://www.cnblogs.com/zhentaoo/p/6394680.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!