本文是翻译的繁体文章,而且还不完整,尽量读原文吧:https://software.intel.com/zh-cn/blogs/2013/10/09/javascript-this
注意:搞过java,c#和c++的人千万不能照搬以前的知识
this是执行上下文的一个属性,而不是变量对象的一个属性或者说是代表类的当前实例。再白话一点,看调用的上下文环境是什么才能决定this在执行的那一刻到底代表什么。
一、this指向调用该函数的对象
语法:
对象.方法名(); //这种情况下函数或者方法内的this代表这个对象
示例:
var obj = { x: 20, f: function(){ console.log(this.x); } }; obj.f(); //调用f函数的时候,点前面的对象是obj,因此f函数内的this指向obj,输出结果是20 obj.innerobj = { x: 30, f: function(){ console.log(this.x); } } obj.innerobj.f(); //由于调用f函数时,点前面的对象是obj.innerobj,因此f函数内的this指向innerobj,输出结果是30
二、this指向全局对象
语法:
函数名称([参数]);//函数内的this关键字指向默认浏览器的window对象
示例:
var x = 10; var f = function(){ console.log(this.x); }; f(); //由于调用f函数时,没有指明[对象.]的形式,因此f函数内的this在执行时指向全局对象,即window,因此输出10
深入理解示例1:
var x = 10; var obj = { x: 20, f: function(){ console.log(this.x); var foo = function(){ console.log(this.x); } foo(); // (2) } }; obj.f(); // (1)
如果你认为上面的代码应该输出20,20的话就还是没有转换为js的思考方式考虑问题(还是java的思路呢),记住是谁调用或者说谁执行就是谁的,(1)位置的代码是obj.f()调用的,第一次的console.log(this.x)的时候this就是obj,因此输出20,第二次的(2)位置的代码是没有指明调用对象是谁,就是直接用foo()调用的,属于全局对象调用方式,则foo函数里面的this.x指向window.x,所以输出10。
要是想输出20,20应该怎么写呢?得把指向obj的this存起来,然后在后面的代码里面去使用,示例如下:
var x = 10; var obj = { x: 20, f: function(){ console.log(this.x); var me=this; var foo = function(){ console.log(me.x); } foo(); // (2) } }; obj.f(); // (1)
另外一个示例:
var x = 10; var obj = { x: 20, f: function(){ console.log(this.x); } }; obj.f(); // (1) var fOut = obj.f; fOut(); //(2) var obj2 = { x: 30, f: obj.f } obj2.f(); // (3)
(1)位置的代码是obj.去调用的,所以执行的时候this代表obj,输出20
(2)位置的代码是全局调用的方式,没有指明是哪个对象,那么执行的时候this指向window,输出10
(3)位置的代码是obj2.去调用的,执行的时候this代表obj2,输出30
相关推荐
NULL 博文链接:https://wv1124.iteye.com/blog/505231
精通JavaScript的this关键字_.docx
详解JavaScript中this关键字的用法_.docx
其中JavaScript 中的 this 关键字,就是一个比较容易混乱的概念,在不同的场景下,this会化身不同的对象。有一种观点认为,只有正确掌握了 JavaScript 中的 this 关键字,才算是迈入了 JavaScript 这门语言的门槛。...
NULL 博文链接:https://wv1124.iteye.com/blog/505236
在传统面向对象语言中,this关键字是个很乖的小孩,从不乱跑,该是谁的就是谁的。可是在JavaScript中,我们发现它不那么乖,有时甚至把我们搞的晕头转向的。所以有必要对它稍微做个总结。
主要介绍了JavaScript的this关键字,真正帮助大家做到精通this关键字,感兴趣的小伙伴们可以参考一下
主要介绍了JavaScript中this关键字用法,结合实例形式总结分析了javascript中this关键字在不同条件下的指向问题与相关操作技巧,需要的朋友可以参考下
本文将给大家详细介绍关于Javascript中this关键字指向的相关内容,让我们先做一个小测试,如果全部答对了,恭喜你不用往下看了。 测试题目 第一题 [removed] var str = 'zhangsan'; function demo() { var str...
主要介绍了javascript的this关键字的用法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
本文介绍了javascript中this关键字,并将有关this的关键字知识列成一个list,会有助于我们理清思路,是一个很好的学习方法。强烈推荐。
跟我学习javascript的this关键字,this是动态绑定,或称为运行期绑定的,这就导致 JavaScript中的this关键字有能力具备多重含义,带来灵活性的同时,也为初学者带来不少困惑。
主要介绍了Javascript中this关键字的一些小知识,本文讲解了this的隐性绑定、var that = this两部份内容,需要的朋友可以参考下
首先,我先抛出一个定论:”在Javascript中,This关键字永远都指向函数(方法)的所有者”。 函数 代码如下:function introduce() { alert(“Hello, I am Laruence\r\n”);}对于这个函数,this关键字指向谁呢...
this是函数内部的对象并且被用于调用该函数,this在全局中的使用非常之灵活,下面就带大家来详解JavaScript中this关键字的用法