普洱 存放 太干燥:"this" of JavaScript
来源:百度文库 编辑:偶看新闻 时间:2024/05/05 14:51:52
this是JavaScript中功能最强大的关键字之一。不幸的是,如果你不知道它具体怎么工作,你将很难正确使用它。
下面我来阐述如何在事件处理中来使用this,之后我会附加一些this相关的例子。
Owner
接下来文章中我们将要讨论的问题是:在函数doSomething()中this所指的是什么?
function doSomething() {
this.style.color = ‘#cc0000‘;
}
在JavaScript中,this通常指向的是我们正在执行的函数本身(译者注:用owner代表this所指向的内容),或者是,指向该函数所属的对象。当我们在页面中定义了函数doSomething()的时候,它的owner是页面,或者是JavaScript中的window对象(或global对象)。对于一个onclick属性,它为它所属的HTML元素所拥有,this应该指向该HTML元素。
这种“所有权”就是JavaScript中面向对象的一种方式。在Objects as associative arrays中可以查看一些更多的信息。
如果我们在没有任何更多准备情况下执行doSomething(),this关键字会指向window,并且该函数试图改变window的style.color。因为window并没有style对象,这个函数将非常不幸的运行失败,并产生JavaScript错误。
Copying
因此如果我们想充分利用this,我们不得不注意使用this的函数应该被正确的HTML元素所拥有。换句话说,我们应该复制这个函数到我们的onclick属性。Traditional event registration会关心它。
element.onclick = doSomething;
这个函数被完整复制到onclick属性(现在成为了函数)。因此如果这个event handler被执行,this将指向HTML元素,并且该元素的颜色得以改变。
这种方法使得我们能够复制这个函数到多个event handler。每次this都将指向正确的HTML元素:
这样你就可以最大限度使用this。每当执行该函数,this所指向的HTML元素都正确响应事件,这些HTML元素拥有doSomething()的一个拷贝。
Referring
然而,如果你使用inline event registration(内联事件注册)
你将不能拷贝该函数!反而这种差异是非常关键的。onclick属性并不包含实际的函数,仅仅是一个函数调用。
doSomething();
因此,它将声明“转到doSomething()并且执行它”。当我们到达doSomething(),this关键字又重新指向了全局的window对象,函数返回错误信息。
The difference
如果你想使用this来指向HTML元素响应的事件,你必须确保this关键字被写在onclick属性里。只有在这种情况下它才指向event handler所注册的HTML元素。
element.onclick = doSomething;
alert(element.onclick)
你将得到
function doSomething() {
this.style.color = ‘#cc0000‘;
}
正如你所见,this关键字被展现在onclick函数中,因此它指向HTML元素。
但是如果执行
alert(element.onclick)
你将得到
function onclick() {
doSomething()
}
这仅仅是到doSomething()函数的一个引用。this关键字并没有出现在onclick函数中,因此它不指向HTML元素。
例子--拷贝
下面的例子中,this被写入onclick函数里:
element.onclick = doSomething
element.addEventListener(‘click‘, doSomething, false)
element.onclick = function() {this.style.color = ‘#cc0000‘;}
例子--引用
下述情况中,this指向window:
element.onclick = function() {doSomething()}
element.attachEvent(‘onclick‘, doSomething)
注意attachEvent()的出现。Microsoft event registration model最主要的弊端是attachEvent()创建了一个指向函数的引用,而不是复制它。因此有时不可能知道哪个HTML正在处理该事件。
组合使用
当使用内联事件注册时,你可以将this发送到函数以至于可以正常使用:
function doSomething(obj) {
//this出现在event handler中并被发送到函数
//obj指向HTML元素,因此可以这样:
obj.style.color = ‘#cc0000‘;
}
原文链接:http://www.quirksmode.org/js/this.html
下面我来阐述如何在事件处理中来使用this,之后我会附加一些this相关的例子。
Owner
接下来文章中我们将要讨论的问题是:在函数doSomething()中this所指的是什么?
function doSomething() {
this.style.color = ‘#cc0000‘;
}
在JavaScript中,this通常指向的是我们正在执行的函数本身(译者注:用owner代表this所指向的内容),或者是,指向该函数所属的对象。当我们在页面中定义了函数doSomething()的时候,它的owner是页面,或者是JavaScript中的window对象(或global对象)。对于一个onclick属性,它为它所属的HTML元素所拥有,this应该指向该HTML元素。
这种“所有权”就是JavaScript中面向对象的一种方式。在Objects as associative arrays中可以查看一些更多的信息。
如果我们在没有任何更多准备情况下执行doSomething(),this关键字会指向window,并且该函数试图改变window的style.color。因为window并没有style对象,这个函数将非常不幸的运行失败,并产生JavaScript错误。
Copying
因此如果我们想充分利用this,我们不得不注意使用this的函数应该被正确的HTML元素所拥有。换句话说,我们应该复制这个函数到我们的onclick属性。Traditional event registration会关心它。
element.onclick = doSomething;
这个函数被完整复制到onclick属性(现在成为了函数)。因此如果这个event handler被执行,this将指向HTML元素,并且该元素的颜色得以改变。
这种方法使得我们能够复制这个函数到多个event handler。每次this都将指向正确的HTML元素:
这样你就可以最大限度使用this。每当执行该函数,this所指向的HTML元素都正确响应事件,这些HTML元素拥有doSomething()的一个拷贝。
Referring
然而,如果你使用inline event registration(内联事件注册)
你将不能拷贝该函数!反而这种差异是非常关键的。onclick属性并不包含实际的函数,仅仅是一个函数调用。
doSomething();
因此,它将声明“转到doSomething()并且执行它”。当我们到达doSomething(),this关键字又重新指向了全局的window对象,函数返回错误信息。
The difference
如果你想使用this来指向HTML元素响应的事件,你必须确保this关键字被写在onclick属性里。只有在这种情况下它才指向event handler所注册的HTML元素。
element.onclick = doSomething;
alert(element.onclick)
你将得到
function doSomething() {
this.style.color = ‘#cc0000‘;
}
正如你所见,this关键字被展现在onclick函数中,因此它指向HTML元素。
但是如果执行
alert(element.onclick)
你将得到
function onclick() {
doSomething()
}
这仅仅是到doSomething()函数的一个引用。this关键字并没有出现在onclick函数中,因此它不指向HTML元素。
例子--拷贝
下面的例子中,this被写入onclick函数里:
element.onclick = doSomething
element.addEventListener(‘click‘, doSomething, false)
element.onclick = function() {this.style.color = ‘#cc0000‘;}
例子--引用
下述情况中,this指向window:
element.onclick = function() {doSomething()}
element.attachEvent(‘onclick‘, doSomething)
注意attachEvent()的出现。Microsoft event registration model最主要的弊端是attachEvent()创建了一个指向函数的引用,而不是复制它。因此有时不可能知道哪个HTML正在处理该事件。
组合使用
当使用内联事件注册时,你可以将this发送到函数以至于可以正常使用:
function doSomething(obj) {
//this出现在event handler中并被发送到函数
//obj指向HTML元素,因此可以这样:
obj.style.color = ‘#cc0000‘;
}
原文链接:http://www.quirksmode.org/js/this.html
javascript 求助,关于this
javascript this的用法
Of This Land
Apples of this kind___.
关于javascript中this相关的问题
out of this world是什么意思?
(and all of this happens, ......?
the theme of this poem?
We have thought a lot of this
what is the meaning of this? :
what is the meaning of this sentence?
survive the termination of this Agreement中文?
Read the rest of this entry
what is the meaning of this sentence?
of all this +名词,...... 这种格式对吗
What do you think of this book?
this evaluation wersoon of deepfreeze has expired
onchange="javascript:location=this.options[this.selectedIndex].value;" 是什么意思
this kind of animal与this kind of animals是一样的吗?
This version of Global IME cannot be installed on this version of windows
汇票At sight of this First of exchangepay to the order of意思
onload="javascript:if(this.width>screen.width-350)this.width=screen.width-350">
what's the meaning of this name?
This kind of insect has four wings feelers.( )