JavaScript里的小妖精———this!!


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

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

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

  • 调用者是对象

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

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

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


举一些栗子������

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指向全局

*/

b.say = a.say;//a.say未被执行,将function赋值给了b,此时b对象也可以打印啦!

b.say();//say函数被对象b调用执行,this指向b【333】

var name = ‘global’; var obj = { name: ‘obj’, getName: function () { return function () { console.log(this.name); } } } obj.getName()();//【global】 /* var fn = obj.getName(); fn(); */


call和apply改变this指向
  • call和apply的第一个参数都是this的指向

  • call的其他参数是一个一个传的

最后前端到底应该怎么学才好?

如果你打算靠自己摸索自学,那么你首先要了解学习前端的基本大纲,这是你将要学习的主要内容,理解以及掌握好这些内容,便可以找到一份初级的前端开发工作。你还需要有一套完整的前端学习教程,作为初学者最好的方式就是看视频教程学习,初学者容易理解接受。

不要选择买书学习,这样的方式没有几个人能学会,基本都是看不下去书,也看不懂书。如果喜欢看书的学弟,可以买一些经典的书籍作为辅助即可,主要还是以看教程为主。每天抽出固定几个小时学习,做好长期学习的准备。学习编程并不是每天光看视频,你学习编程最重要的目的是为了编写软件产品,提供给大众使用,所以用手写出代码实现功能才是我们要做的事情。

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值