咖啡Java
站在巨人的肩上
Flying in the world of Java
posts - 114, comments - 196, trackbacks - 0, articles - 0
BlogJava
首頁
新隨筆
聯系
管理
聚合
"this" of JavaScript你理解有多少?
Posted on 2006-11-27 16:48
Jaunt
閱讀(250)
評論(0)
編輯
收藏
所屬分類:
JavaScript
譯者:
Flyingis
編輯:
Jaunt
原載:
http://www.tkk7.com/flyingis/archive/2006/09/15/69888.html
this是JavaScript中功能最強大的關鍵字之一。
Owner
接下來文章中我們將要討論的問題是:在函數doSomething()中this所指的是什么?
function
?doSomething()?
{
??
this
.style.color?
=
?'#cc0000';
}
在JavaScript中,this通常指向的是我們正在執行的函數本身,或者是,指向該函數所屬的對象。當我們在頁面中定義了函數doSomething()的時候,或者是JavaScript中的window對象(或global對象)。對于一個onclick屬性,它為它所屬的HTML元素所擁有,this應該指向該HTML元素。
這種“所有權”就是JavaScript中面向對象的一種方式。?
如果我們在沒有任何更多準備情況下執行doSomething(),this關鍵字會指向window,并且該函數試圖改變window的 style.color。因為window并沒有style對象,這個函數將非常不幸的運行失敗,并產生JavaScript錯誤。
Copying
??
因此如果我們想充分利用this,我們不得不注意使用this的函數應該被正確的HTML元素所擁有。換句話說,我們應該復制這個函數到我們的onclick屬性。
element.onclick?
=
?doSomething;
這個函數被完整復制到onclick屬性(現在成為了函數)。因此如果這個event handler被執行,this將指向HTML元素,并且該元素的顏色得以改變。
這種方法使得我們能夠復制這個函數到多個event handler。每次this都將指向正確的HTML元素:
這樣你就可以最大限度使用this。每當執行該函數,this所指向的HTML元素都正確響應事件,這些HTML元素擁有doSomething()的一個拷貝。
Referring
然而,如果你使用
inline event registration
(內聯事件注冊)
<
element?
onclick
="doSomething()"
>
你將不能拷貝該函數!反而這種差異是非常關鍵的。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元素。
但是如果執行
<
element?
onclick
="doSomething()"
>
alert(element.onclick)
你將得到
function
?onclick()?
{
??doSomething()
}
這僅僅是到doSomething()函數的一個引用。this關鍵字并沒有出現在onclick函數中,因此它不指向HTML元素。
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發表評論。
網站導航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關文章:
Javascript 如何實現對象的拖動?
對google個性主頁的拖拽效果的js的完整注釋
判斷Checkbox和Radio的一種方法
JavaScript,等比例縮放圖片的函數
setInterval全面的介紹(轉)
用javascript進行拖拽
[下載]JavaScript權威指南(第五版)
發現一個有用的js事件onpropertychange
JS中的setTimeout和setInterval的區別
javascript小技巧(收藏)
<
2006年11月
>
日
一
二
三
四
五
六
29
30
31
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
1
2
3
4
5
6
7
8
9
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(2)
給我留言
查看公開留言
查看私人留言
隨筆分類
(114)
Adobe Flex(1)
Database(5)
Emacs(1)
html&css(1)
Ibatis(1)
JavaScript(21)
Linux/Unix(2)
seo優化(2)
主流Ajax(11)
健康生活(6)
另一種人生(程序人生)(8)
咖啡Java(21)
拾貝人生(20)
管理哲學(6)
經典C++
設計模式(java)(4)
軟件工藝(4)
相冊
My College
Friend's blogs
Ducky Yazy's blog
當當網圖書
當當網購物
樺清科技
樺清科技,是集網站優化、網站建設、IDC服務等于一體的網絡服務公司。
有只企鵝叫Linux
Fedora
Linuxfans
LinuxSir
有本經典叫C++
boost.org
有杯咖啡叫Java
Java Open
Java World
最新隨筆
1.?什么是客戶轉化率?
2.?一個成功網站必須擁有的技術
3.?九個抗電腦幅射方法
4.?養成喝水的好習慣
5.?長期伏案工作的頸椎保健
6.?管理故事:一條褲子
7.?46個不可不知的常識
8.?窮人的習慣
9.?李嘉誠給年青商人的98條忠告
10.?關于工作與人生的精辟哲理
搜索
積分與排名
積分 - 79120
排名 - 709
最新評論
1.?1[未登錄]
151321
--1
2.?re: [下載]JavaScript權威指南(第五版)
謝謝分享
--啊啊啊啊啊啊啊啊啊啊啊啊
3.?re: [下載]JavaScript權威指南(第五版)
發順豐
--shiyinlong
4.?re: [下載]JavaScript權威指南(第五版)
謝謝分享!!
--camado
5.?re: [下載]JavaScript權威指南(第五版)[未登錄]
where is it?
--kk
閱讀排行榜
1.?[下載]JavaScript權威指南(第五版)(8504)
2.?認識for…in 循環語句(7856)
3.?c:forEach標簽的使用(3541)
4.?ibatis中sql in語句的配置(3480)
5.?對事業的定義(3036)
評論排行榜
1.?[下載]JavaScript權威指南(第五版)(170)
2.?設定屬性rel為external與internal的不同(4)
3.?人生少走彎路的十條忠告 (3)
4.?c:forEach標簽的使用(3)
5.?如何將字符串或者數字轉換成大寫貨幣(3)
Copyright Jaunt.
主站蜘蛛池模板:
全部免费毛片在线播放
|
久久亚洲精品国产精品婷婷
|
亚洲av日韩片在线观看
|
国产伦精品一区二区三区免费迷
|
亚洲AV成人潮喷综合网
|
边摸边吃奶边做爽免费视频99
|
国产高清对白在线观看免费91
|
一级毛片免费播放
|
国产美女无遮挡免费网站
|
久久精品国产亚洲av麻豆
|
亚洲av产在线精品亚洲第一站
|
亚洲精品国产高清在线观看
|
国产精品免费在线播放
|
亚洲一区二区三区AV无码
|
亚洲av永久无码精品天堂久久
|
韩国免费一级成人毛片
|
久久亚洲中文字幕精品一区
|
亚洲噜噜噜噜噜影院在线播放
|
aa在线免费观看
|
性一交一乱一视频免费看
|
亚洲视频在线免费观看
|
色多多免费视频观看区一区
|
国产亚洲人成网站在线观看
|
免费人成在线观看视频高潮
|
又大又黄又粗又爽的免费视频
|
亚洲狠狠成人综合网
|
免费在线观看亚洲
|
色www永久免费网站
|
中文字幕亚洲不卡在线亚瑟
|
午夜免费啪视频在线观看
|
国产成人精品亚洲日本在线
|
精品一区二区三区免费毛片爱
|
亚洲一区二区三区国产精品
|
自拍偷区亚洲国内自拍
|
亚洲精品国产va在线观看蜜芽
|
亚洲精品美女久久久久久久
|
国产亚洲精品成人a v小说
|
91精品免费国产高清在线
|
香蕉视频在线观看亚洲
|
成全视频免费观看在线看
|
456亚洲人成影院在线观
|