this对象

我们知道,this对象是在运行时基于函数的执行环境绑定的。
1:在全局函数中,this等于windows。
2:而当函数作为某个对象的方法调用时,this等于那个对象。不过,匿名函数的执行环境具有全局性,因此其this对象通常指向window。
举个栗子:

var name = 'the window';
var obj = {
    name: 'my obj';
    getNameFunc: function(){
        return function(){
            return this.name;
            };
        }
}
alert(obj.getNameFunc()()); //the window

运行代码后发现结果为the window,这就说明this的指向为全局。那为什么呢?我的理解是:当执行obj.getNameFunc()()时会立即调用getNameFunc的返回函数。它返回一个匿名函数,匿名函数又返回this.window。而在上面已经说过了,匿名函数的this指向window。所以结果也就不言而喻了。
那么,如果想要拿到局部的name该怎么实现呢?我们可以把this保存在一个闭包可以访问到的变量里面。
延续上面的栗子实现:

var name = 'the window';
var obj = {
    name: 'my obj';
    getNameFunc: function(){
        var that = this;
        return function(){
            return that.name;
            };
        }
}
alert(obj.getNameFunc()()); //my obj

该代码与第一个的区别在于:在定义匿名函数之前,我们把this对象赋值给了一个名叫that的变量。而在定义了闭包之后,闭包也可以访问这个变量,因为它时我们在包含函数中特意声明的一个变量。
3:apply调用:apply()时函数对象的一种方法,它的作用时改变函数的调用对象,它的第一个参数就表示改变后的调用这个函数的对象。apply()的参数为空时,默认调用全局变量。
举个栗子:

var numbres = [23,5,6,8];
var max = Math.max.apply(Math,numbers);

该代码可以用于查询numbers数组中的最大值。numbers本身没有max方法,但是Math有,所以我们就可以借助apply改变调用该函数的对象,最终实现效果。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值