维护一些程序,在javascript中经常看到this这个关键字,结合资料和自己的理解,整理一下。
如果该函数被指定为某个对象的方法,则可以在该函数内使用 this 关键字来引用该对象。
在对象的定义范围内使用 this 关键字来引用该对象本身
1.<div οnclick="// 可以在里面使用this">division element</div> this 指向div 同时也可以在其它元素中用this指向
2. <div id="elmtDiv">division element</div>
<script language="javascript">
var div = document.getElementById('elmtDiv');
div.attachEvent('onclick', EventHandler); //attachEvent把div的onclick事件和一个方法绑定
function EventHandler()
{
// 在此使用this
}
</script> 在此this 指向window对象,若要引用div对象this.event.srcElement;
{
// 在此使用this
}
</script> 在此this 指向window对象,若要引用div对象this.event.srcElement;
3、用DHTML方式在事件处理函数中使用this关键字:
<div id="elmtDiv">division element</div>
<script language="javascript">
var div = document.getElementById('elmtDiv');
div.onclick = function()
{
// 在此使用this
};
</script> 产生的方法同上,但此处的this 指向div
<div id="elmtDiv">division element</div>
<script language="javascript">
var div = document.getElementById('elmtDiv');
div.onclick = function()
{
// 在此使用this
};
</script> 产生的方法同上,但此处的this 指向div
4、类定义中使用this关键字:
function JSClass()
{
var myName = 'jsclass';
this.m_Name = 'JSClass';
}
function JSClass()
{
var myName = 'jsclass';
this.m_Name = 'JSClass';
}
JSClass.prototype.ToString = function()
{
alert(myName + ', ' + this.m_Name);
};
{
alert(myName + ', ' + this.m_Name);
};
var jc = new JSClass();
jc.ToString();// 这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。
jc.ToString();// 这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。
5、为脚本引擎内部对象添加原形方法中的this关键字:
Function.prototype.GetName = function()
{
var fnName = this.toString();
fnName = fnName.substr(0, fnName.indexOf('('));
fnName = fnName.replace(/^function/, '');
return fnName.replace(/(^\s+)|(\s+$)/g, '');
}
function foo(){}
alert(foo.GetName()); //这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。
Function.prototype.GetName = function()
{
var fnName = this.toString();
fnName = fnName.substr(0, fnName.indexOf('('));
fnName = fnName.replace(/^function/, '');
return fnName.replace(/(^\s+)|(\s+$)/g, '');
}
function foo(){}
alert(foo.GetName()); //这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。
当函数不是该对象的定义时,就不能象普通情况那样使用 this 或类似的关键字来引用当前的执行函数。
this就是指向当前对象或元素。