javascript的this的理解

javascript的this关键字总是让人捉摸不透,this关键字代表函数运行时,自动生成的一个内部对象,只能在函数内部使用,因为函数的调用场景不同,this的指向也不同。其实只要理解javascript语言的特性就很好理解this。在javascript中,函数可以直接调用:

function range(){    this.min = 5;}range()console.info(min)  ==>    5

这里函数range是在全局中运行的,所以this指向全局对象,在浏览器中全局对象是window。函数也可以作为对象的方法调用,如下:

var range = {    setmin : function(){        this.min = 5;    }}range.setmin();console.log(min);   ==> undefinedconsole.log(range.min) ==> 5 当作为对象方法调用时,this指向的是调用对象,而不是全局对象。当函数作为构造函数时,和作为对象方法一样,this指向调用函数的对象。javascript还提供apply和call方法来改变this绑定的对象。这里不详细讨论。当this关键字在闭包中时,令人不解的事情发生了var range = {    setrange : function(){        this.min = 5;        var setmax = function(){            this.max = 100;        };        setmax();    }};range.setrange();console.log(range.min);   ==> 5console.log(range.max);   ==> undefinedconsole.log(max);         ==> 100这里max应该是作为range的属性,可实际上确是全局的,this指向了全局对象,按道理讲this.max的this应该绑定到外层函数的调用对象上,实际上绑定到了全局,是不是很神奇,这是javascript的一个设计缺陷。

关键字:JavaScript, this, 函数, range

版权声明

本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部