最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript this 深入理解

 更新時(shí)間:2009年07月30日 17:03:37   作者:  
一直以來,對(duì)于JavaScript 中的this的理解都是很模糊的, 特別是對(duì)函數(shù)進(jìn)行apply 與 call 調(diào)用。這兩個(gè)操作如果沒有很好的理解 JavaScript中this的概念,會(huì)越搞越迷糊。

最近一段時(shí)間看了很多JavaScript 的庫源碼, 如 prototype, Ext core 等。這些庫中大量應(yīng)用到了這一概念。直到昨天翻了一下《JavaScript王者歸來》這本書才算對(duì)this有一個(gè)深刻的理解。
大至歸結(jié)一下:
1. 函數(shù)調(diào)用者與所有者
JavaScript 中函數(shù)(function) 存在調(diào)用者 與 所有者這兩個(gè)概念,調(diào)用者是指調(diào)用函數(shù)的對(duì)象,通常是一個(gè)指向調(diào)用了當(dāng)前函數(shù)的函數(shù)的引用,如果是頂層調(diào)用,那么caller=null, 大部分瀏覽器的JavaScript實(shí)現(xiàn) 可以用 caller 這個(gè)屬性獲得(這不是 ECMAScript 規(guī)范的一部分,所有還是慎用)。 從以下的代碼能夠很好的理解這點(diǎn):

復(fù)制代碼 代碼如下:

function a(){
alert('fun a caller=' + a.caller);
}
function b(){
a();
}
a();
b();

-----------
運(yùn)行結(jié)果可以看到兩個(gè)對(duì)話框:
1.
fun a caller=null;
2.
fun a caller=function b(){
a();
}
--------------------------
而對(duì)于所有者,則是指調(diào)用函數(shù)的對(duì)象(一個(gè)動(dòng)態(tài)的概念), 在函數(shù)體中的this就是指向了函數(shù)的所有者。在這里的this 與 Java 以及 C++ 中的 this指針是完全不同的兩個(gè)概念,很多人忽略了這一點(diǎn),這也是導(dǎo)致 JavaScript中的this無法很好理解的原因之一。看看以下的例子:
復(fù)制代碼 代碼如下:

var oa = {
x:1,
y:2
}
var ob = {
x:11,
y:12
}
function a(w){
alert(w + "=" + this.x + "," + this.y)
}
a("?");
oa.fun = a;
oa.fun("a");
ob.fun = a;
ob.fun("b");

---------
一開始的調(diào)用 a() 這時(shí)未指定所有者,一般這種情況 this 是指向?yàn)g覽器的頂層元素 window 的, 而window中未定義x 與 y 屬性。
所以結(jié)果顯示為: ?=undefined,undefined
oa.fun = a; oa.fun("a"); 將函數(shù)引用賦值給對(duì)像a的屬性fun, 這時(shí)再調(diào)用函數(shù)的所有者變成了a, 則結(jié)果顯示為:a=1,2
同理 ob.fun("b")則顯示:b=11,12。
在JavaScript中要改變一個(gè)函數(shù)的所有者(this)的方法就是將函數(shù)引用賦值給一個(gè)對(duì)象的屬性。
同是在Function對(duì)象中也提供了兩個(gè)原型函數(shù)可以實(shí)現(xiàn)這一功能: apply, call, 這兩個(gè)函數(shù)的第一個(gè)參數(shù)就是要指定的所有者對(duì)象,它們間的唯一區(qū)別就是apply將其后的要傳遞給函數(shù)的形參封裝到數(shù)組中,或者直接用 arguments對(duì)象。而call則直接將形參跟在其后。
因此上面的 oa.fun=a; oa.fun("a") 可以改寫成 a.apply(oa, ["a"]) 或 a.call(oa, "a");
ob.fun=b; ob.fun("b") 可以改寫成 a.apply(ob, ["b"]) 或 b.call(ob, "b");
知道了以上這此,對(duì)于 this 的作用域及其使用就很好理解了。

下面是一些參考文檔
javascript this用法小結(jié)
http://m.fzitv.net/article/16863.htm

JavaScript this 深入理解
http://m.fzitv.net/article/19425.htm

JAVASCRIPT THIS詳解 面向?qū)ο?BR>http://m.fzitv.net/article/17584.htm

Javascript this指針
http://m.fzitv.net/article/19434.htm

JavaScript中this關(guān)鍵字使用方法詳解
http://m.fzitv.net/article/7954.htm

Javascript this關(guān)鍵字使用分析
http://m.fzitv.net/article/16235.htm

相關(guān)文章

  • js寫一個(gè)彈出層并鎖屏效果實(shí)現(xiàn)代碼

    js寫一個(gè)彈出層并鎖屏效果實(shí)現(xiàn)代碼

    js實(shí)現(xiàn)一個(gè)彈出層并鎖屏效果是每一網(wǎng)友所期望的效果,于是搜集整理一番,把代碼曬出來和大家分享
    2012-12-12
  • JavaScript基于擴(kuò)展String實(shí)現(xiàn)替換字符串中index處字符的方法

    JavaScript基于擴(kuò)展String實(shí)現(xiàn)替換字符串中index處字符的方法

    這篇文章主要介紹了JavaScript基于擴(kuò)展String實(shí)現(xiàn)替換字符串中index處字符的方法,涉及javascript使用substr方法針對(duì)字符串進(jìn)行替換操作的相關(guān)實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-06-06
  • NodeJS的模塊寫法入門(實(shí)例代碼)

    NodeJS的模塊寫法入門(實(shí)例代碼)

    前面提到了NodeJS的命令行和Web版之“Hello,World”。命令行是直接執(zhí)行hello.js文件,Web版的需要require http模塊。http模塊是NodeJS自身提供的
    2012-03-03
  • 下載文件個(gè)別瀏覽器文件名亂碼解決辦法

    下載文件個(gè)別瀏覽器文件名亂碼解決辦法

    下載文件個(gè)別瀏覽器文件名亂碼解決辦法,需要的朋友可以參考一下
    2013-03-03
  • echarts橫向柱狀圖簡(jiǎn)單實(shí)現(xiàn)方法

    echarts橫向柱狀圖簡(jiǎn)單實(shí)現(xiàn)方法

    這篇文章主要給大家介紹了關(guān)于echarts橫向柱狀圖簡(jiǎn)單實(shí)現(xiàn)的相關(guān)資料,ECharts是百度前端開發(fā)部開發(fā)的一個(gè)開源可視化庫,它可以幫助開發(fā)者輕松的實(shí)現(xiàn)各種數(shù)據(jù)可視化,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12
  • Javascript類型判斷相關(guān)例題及解析

    Javascript類型判斷相關(guān)例題及解析

    這篇文章主要介紹了Javascript類型判斷相關(guān)例題及解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-08-08
  • JS操作Cookies包括(讀取添加與刪除)

    JS操作Cookies包括(讀取添加與刪除)

    一直都是簡(jiǎn)單去js實(shí)現(xiàn)cookie的一些操作,今天把js對(duì)cookie操作系統(tǒng)的整理了一遍,包括:js讀取cookie,js添加cookie,js刪除cookie
    2012-12-12
  • javascript中的if語句使用介紹

    javascript中的if語句使用介紹

    在javascript中的一些選擇語句,其實(shí)jf語句就是一種,下面舉幾個(gè)不錯(cuò)的示例為大家介紹下,希望對(duì)大家學(xué)習(xí)有所幫助
    2013-11-11
  • 淺談js多維數(shù)組和hash數(shù)組定義和使用

    淺談js多維數(shù)組和hash數(shù)組定義和使用

    下面小編就為大家?guī)硪黄獪\談js多維數(shù)組和hash數(shù)組定義和使用。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-07-07
  • 老生常談Bootstrap媒體對(duì)象

    老生常談Bootstrap媒體對(duì)象

    下面小編就為大家?guī)硪黄仙U凚ootstrap媒體對(duì)象。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2017-07-07

最新評(píng)論

从化市| 湖南省| 德钦县| 开平市| 博客| 盐城市| 黄山市| 永新县| 呼图壁县| 额济纳旗| 翼城县| 博客| 油尖旺区| 长治市| 西和县| 克拉玛依市| 保定市| 临泽县| 崇州市| 五大连池市| 凤山县| 包头市| 泰兴市| 日土县| 台湾省| 浠水县| 突泉县| 祁连县| 莱芜市| 汽车| 开江县| 九台市| 楚雄市| 嵊泗县| 石河子市| 济源市| 南木林县| 福建省| 浪卡子县| 明光市| 临高县|