关于this的指向性问题

this

 这个this根据官方的解释是面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。

在全局对象window中
在全局对象window中下的属性都可以通过this直接调用;

var a = 10;s
console.log(this.a);

在这里插入图片描述
只要在window下的属性,都可以通过this.属性名(变量名)调用
在这里插入图片描述
而根据指向性的下也可判断是指向window的。

通过一个对象的属性调用
.作为对象方法调用,this 指代上级对象

var obj={
	s:function(){
	console.log(this)
}
}
obj.s();

在这里插入图片描述

《高级程序设计-第三版》资料

关于this补充内容

var name = "The Window"; //创建一个全局变量name;
var object = { 
    name : "My Object", //创建一个对象中包含name的属性
    getNameFunc : function(){ //创建一个方法
    return function(){//由于返回值也是个方法
     return this.name; 
     }; 
   }
};//所以最后返回this.name//window中找name这个变量
 alert(object.getNameFunc()()); //"The Window"

每个函数在被调用时都会自动取得两个特殊的变量this和arguments。内部函数在搜索这两个变量时,只会搜索到其活动对象为止,因此永远不可能直接访问外部函数中的这两个变量不过,把外部作用域中的 this 对象保存在一个闭包能够访问 到的变量里,就可以让闭包访问该对象了

var name = "The Window"; //创建一个全局变量name;
var object = { 
    name : "My Object", //创建一个对象中包含name的属性
    getNameFunc : function(){ //创建一个方法
    var that = this;//把外部作用域中的 this 对象保存在变量里//这里this是指向object
    return function(){//由于返回值也是个方法
     return that.name; 
     }; 
   }
};//由于已经保存this这个变量,访问到时闭包里面的name;
 alert(object.getNameFunc()()); //"My Object"

改变this的指向性问题

在js中改变this指向性有三种解决方案
call(),aplly(),bind(),

它们之间既有相似之处也有不同之处。

相同之处
1.都是用来改变函数的this对象的指向的
2.第一个参数都是this要指向的对象
3.都可以利用后续参数传参

区别
1.call和apply都是对函数的直接调用(也叫直接执行函数),而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以(将上下文绑定到bind()括号中的参数上,然后将它返回)。所以,bind后函数不会执行,而只是返回一个改变了上下文的函数副本。
2.call和apply都可以传参数。call后面的参数与fn方法中是一一对应的,而apply的第二个参数是一个数组,数组中的元素是和fn方法中一一对应的,这就是两者最大的区别。
3.bind是ES5中的方法,可以向call一样传参,也可以在调用的时候再进行传参。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值