JavaScript里的小妖精——


题中一般分为两种情况
  • 调用者是函数

  • 函数通过对象被调用(this指向对象 )

  • 函数单独被调用(this指向undefined,非严格模式下指向全局)

  • 调用者是对象

  • 对象声明在函数中 (this指向undefined,非严格模式下指向全局)

  • 对象声明在函数外 (this指向全局)

PS:匿名函数的存在会导致this指向的丢失与以上情况不符合,用bind()来解决就可以了


举一些栗子������

《大厂前端面试题解析+Web核心总结学习笔记+企业项目实战源码+最新高清讲解视频》无偿开源 徽信搜索公众号【编程进阶路】

var a = 1; var obj = { a:2, c:this.a + 10, b: function () { return this.a; } } console.log(obj.b()); //函数b通过对象obj被调用,this指向obj【2】 console.log(obj.c); //对象声明在函数外,this指向全局【11】

var o = { a:10, b:{ a:12, fn:function(){ console.log(this.a); } } } o.b.fn();//fn通过对象被b调用,this指向b【12】

var o = { a:10, b:{ a:12, fn:function(){ console.log(this.a); console.log(this); } } } var j = o.b.fn;//fn未被执行 j();//此时fn单独被调用,this指向全局,全局没有a【undefined】【window】

var name = ‘222’;

var a = {

name:‘111’,

say:function () {

console.log(this.name);

}

}

var fun = a.say;//say未被执行

fun();//say单独被执行,this指向全局【222】

a.say();//函数say通过对象a被调用,this指向对象a【111】

var b = {

name: ‘333’,

say: function (fun) {

fun();

}

}

b.say(a.say);//a.say未被执行

fun();//say单独执行,this指向全局【222】

/*b.say(function(){}),但是通过b对象调用的函数say被执行,this指向b,。

但此时的this不是我们要打印的this,我们要打印的this在function(){}里,function里的this指向全局

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值