js中的this的指向问题

javascript中this指向问题

  1. this永远指向一个对象
  2. this的指向完全取决于函数调用的位置

需要注意的是在JavaScript中,一切皆对象,运行环境也是对象,所有函数都是在某个对象下运行,而this就是函数运行时所在的对象(环境)

原理

function fun(){
    console.log(this.s);
}
var obj = {
    s:'1',
    f:fun
}
var s = '2';

//这里的obj.f(),是调用了obj对象中的f方法,所以运行环境在obj对象内,this指向obj对象
obj.f(); //1

//这里到的fun()函数的运行环境是在window对象环境运行,所以this指向window
fun(); //2

1、在函数中直接使用(window)

function get(content)
{
console.log(content);
}
get('你好');

//你要知道,get('你好')的完整写法应该是:
get(window,'你好')

2、当函数作为对象的方法被调用(谁调用我,我就指向谁)

       var Person = {
            name: '张三',
            run: function(time) {
                console.log(`${this.name}在跑步,最多${time}分钟就不行了`)
            }
        }
        Person.run(30);
        
        //相当与下面的写法
        Person.run.call(Person, 30)

面试高频题

        var name = 222;
        var a = {
            name: 111,
            say: function() {
                console.log(this.name)
            }
        }

        var fun = a.say;
        fun(); ///函数的直接调用--this指向window---222
        a.say() //在对象中调用方法---this指向该对象a---111

        var b = {
            name: 333,
            say: function(fun) {
                fun() //函数的直接调用--this指向window
            }
        };

        b.say(a.say); //a.say带入到b的fun中,fun()属于函数的直接调用.所以this指向window,this.name=222
        b.say = a.say; //相当于把a.say复制到b.say中
        b.say(); //在函数中直接调用--this指向对象b--this.name=333
       
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值