JavaScript中this的用法及this在不同应用场景的作用解析
由于其运行期绑定的特性,JavaScript中的this含义要丰富得多,它可以是全局对象、当前对象或者任意对象,这完全取决于函数的调用方式。
JavaScript中函数的调用有以下几种方式:作为函数调用,作为对象方法调用,作为构造函数调用,和使用apply或call调用。下面我们将按照调用方式的不同,分别讨论this的含义。
情况一:纯粹的函数调用
这是函数的最通常用法,属于全局性调用,因此this就代表全局对象Global。
1、函数也可以直接被调用,此时this绑定到全局对象。
functionmakeNoSense(x){ this.x=x; } makeNoSense(5); console.log(x);//x已经成为一个值为5的全局变量 functiontest(){ this.x=1; alert(this.x); } test();//1
情况二:作为对象方法的调用
函数还可以作为某个对象的方法调用,这时this指代对象内部属性被调用。
varmyObject={ value:0, increment:function(inc){ this.value+=typeofinc==='number'?inc:1; } }; myObject.increment(); console.log(myObject.value);//1 myObject.increment(2); console.log(myObject.value);//3
情况三:作为构造函数调用
javaScript支持面向对象式编程,与主流的面向对象式编程语言不同,JavaScript并没有类(class)的概念,而是使用基于原型(prototype)的继承方式。
相应的,JavaScript中的构造函数也很特殊,如果不使用new调用,则和普通函数一样。作为又一项约定俗成的准则,构造函数以大写字母开头,提醒调用者使用正确的方式调用。如果调用正确,this绑定到新创建的对象上。
所谓构造函数,就是通过这个函数生成一个新对象(object)。这时,this就指这个新对象。
functionPoint(x,y){ this.x=x; this.y=y; } varp1=newPoint(3,2); console.log(p1.x+","+p1.y);//3,2
为了表明这时this不是全局对象,我对代码做一些改变:
varx=4; functionPoint(x,y){ this.x=x; this.y=y; } varp1=newPoint(3,2); console.log(p1.x+","+p1.y);//3,2
情况四:apply或call调用
让我们再一次重申,在JavaScript中函数也是对象,对象则有方法,apply和call就是函数对象的方法。这两个方法异常强大,他们允许切换函数执行的上下文环境(context),即this绑定的对象。很多JavaScript中的技巧以及类库都用到了该方法。让我们看一个具体的例子:
functionPoint(x,y){ this.x=x; this.y=y; this.moveTo=function(x,y){ this.x=x; this.y=y; console.log(this.x+","+this.y); } } varp1=newPoint(0,0); varp2={x:0,y:0}; p1.moveTo(1,1);//1,1 p1.moveTo.apply(p2,[10,10]);//10,10
在上面的例子中,我们使用构造函数生成了一个对象p1,该对象同时具有moveTo方法;使用对象字面量创建了另一个对象p2,我们看到使用apply可以将p1的方法应用到p2上,这时候this也被绑定到对象p2上。另一个方法call也具备同样功能,不同的是最后的参数不是作为一个数组统一传入,而是分开传入的。本文通过对JavaScript中经常容易混淆的this在四中应用场景中的使用方法进行了讲解,希望对您有所帮助,喜欢的话,请推荐一下哦。
以上所述是小编给大家介绍的JavaScript中this的用法及this在不同应用场景的作用解析,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!