说一说这“this”(说一说这是什么季节,有哪些小动物)

网友投稿 422 2022-06-15


JS中不容易懂的概念除了闭包之外,还有一个应该是首当其冲:this ,这个东西经常让人搞混,那么今天我们就来好好看看它的庐山真面目。

定义一个对象:

var Charles = {

living: true,

age:23,

gender:male,

getGender:function(){ return Charles.gender;

}

}; console.log(Charles.getGender()); //输出:male

下面的代码有一样的效果:

var Charles = {

living: true,

age:23,

gender:male,

getGender:function(){ return this.gender; //注意“this” }

}; console.log(Charles.getGender()); //输出:male

那么,this究竟在代码里指代的是什么?我们该怎么分析,因为在具体的环境里有时很难分清this指代的真面目。那么,现在,需要记住一句话:

当this值的宿主函数被封装在另一个函数里面,或者在另一个函数的上下文中被调用时,this值永远是对全局(head/window)对象的引用。

也就是说,this值在嵌套函数里面,对于ES5永远指向window。

var myObject = {

myProperty: 'I can see the light',

myMethod: function(){ var that = this; console.log(this); //输出:'Object(这里是myObject)' var helperFunction = function(){ console.log(that.myProperty); // 输出'I can see the light' console.log(this); //如果不使用`that`,则输出'window',因为是在嵌套函数里面 }(); //立即执行 }

}

myObject.myMethod(); //调用 myMethod

结合上面的那句话,对于ES5来说,this也就是这个情况:

var myObject = {

func1: function(){ console.log(this); //输出 'Object'(第一层函数) var func2= function(){ console.log(this); //从此处开始,this都是window(第二层函数) var func3= function(){ console.log(this); //当然是window }();

}();

}

}

myObject.func1();

到这里,应该明白了this在JS中的位置,相信以后不会再分不清楚了。

文/Charles_ln(简书作者)

原文链接:http://jianshu.com/p/847fc5599d3d


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:为什么你的android代码写得这么乱
下一篇:40条Android开发优化建议(android性能优化最佳实践)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~