JS笔记-this的各种用法

在面向对象编程语言中,在就出现了this对象。在Javascript中,也有this对象,但情况就相比复杂多了。

一般地说,this对象引用的是函数据以执行的环境对象。

坊间传言:this就是指向最近的对象。谁是对象而且离this最近,this就指向谁。这个是很表层的说法。

而深层的说法,指的是:this指针代表的是执行当前代码的对象的持有者。

比如以下代码:

var hi = "I am window";
        function sayHi(){
            var hi = "I am sayHi";
            alert(this.hi);
        }
sayHi();



或者大家会以为结果是I am sayHi。但是实际上是I am window,意味着this指向的是window对象。

我认为大家先要了解什么叫做环境对象。在我的理解里,环境对象指的是:在a环境下执行函数,a即为函数的环境对象。上面sayHi函数,实际上是在window对象中执行的,因此this调用的也是window对象中的变量hi。

在下面的情况下,this的指向就变了。

var hi = "I am window";
        function sayHi(){
            var hi = "I am sayHi";
            alert(this.hi);
        }
        var o = { hi : "I am O" };
        o.sayHi = sayHi;
        o.sayHi();
        sayHi(); 
这里的结果是I am O。


实际上我们可以这样理解:在前一段代码中,执行sayHi()的时候,其实JS内部解释的时候有我们尚未加上的前缀window.。完整的调用应该是:window.sayHi();而第二段代码中则是o.sayHi()。this对象可以说就是指向调用该函数的那个对象,即window和O。

P.S.:在调用this时,并不能认为函数也是一个对象。函数对象并不能在this中占有一席的位置,大家请看下面的代码:

        var hi = "I am window";
        function sayHi(){
            var hi = "I am sayHi";
            function sayHello(){
                alert(this.hi);
            }
            sayHello();
        }
        sayHi();

这里的运行结果是:I am window。但是sayHello()是在sayHi()里面执行的啊。大家可以这样想,我们能在JS里用形似sayHi.sayHello()这样的语法吗?答案是不可以的。因此,sayHi在这里也就不算是一个可以被this指向的对象。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值