- 1.一般用处
- 2.this.x与apply()、call()
- 3.无意义(诡异)的this用处
- 4.事件监听函数中的this
- 5.总结
在JavaScript中的this变量是一个令人难以摸清的关键字,this可谓是非常强大,充分理解this相关知识有助于我们在编写面向对象的JavaScript程序时能够迎刃有余。
1.一般用处
对于this变量最重要的是能够理清this所引用的对象到底是哪一个,也许很多资料上都有自己的解释,但有些概念讲的偏复杂。简单的理解:首先分析this所在的函数是当做哪个对象的方法调用的,则该对象就是this所引用的对象
示例一:
var obj={};obj.x=100;obj.y=function(){ alter(this.x);}obj.y(); //弹出100
这段代码非常容易理解,当执行obj.y()时,函数是作为对象obj的方法调用的,因此函数体内的this指向的是obj对象,所以会弹出100。
示例二1 var checkThis=function (){ 2 alter(this.x); 3 }; 4 var x="this is a property of window"; 5 var obj={}; 6 obj.x=100; 7 obj.y=function(){alter(this.x)}; 8 var obj2=obj.y; 9 obj.y(); //弹出10010 checkThis(); //弹出this is a property of window11 obj2(); //弹出this is a property of window
这里为什么会弹出'this is a property of window ',可能让人迷惑。在Javascript的变量作用域里面有一条规则“全局变量是windows对象的属性”。当执行checkThis();就相当于执行windows。checkThis(),所以会弹出'this is a property of window'
2,this,x于apply()、call()
通过call和apply可以从新定义函数的执行环境,即this的指向,着对于一些应用当中是十分常用的。
示例三:
function changeStyle(type,value){ this.style[type]=value;}var one=document.getElementById('one');changeStyle.call(one,'fontSize','100px');changeStyle(one,'fontSize','100px');//出现错误,因为此时changeStyle中的this引用的是windows对象,而window并无style属性。
注意changeStyle.call() 中有三个参数,第一个参数用于指定该函数将被哪个对象所调用。这里指定了one,也就意味着,changeStyle函数将被one调用,因此函数体内this指向是one对象。而第二个和第三个参数对应的是changeStyle函数里的type和value两个形参。最总我们看到的效果是Dom元素one的字体变成了20px。
示例四apply():