天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

JavaScript this 深入理解

最近一段時間看了很多JavaScript 的庫源碼, 如 prototype, Ext core 等。這些庫中大量應用到了這一概念。直到昨天翻了一下《JavaScript王者歸來》這本書才算對this有一個深刻的理解。
大至歸結一下:
1. 函數調用者與所有者
JavaScript 中函數(function) 存在調用者 與 所有者這兩個概念,調用者是指調用函數的對象,通常是一個指向調用了當前函數的函數的引用,如果是頂層調用,那么caller=null, 大部分瀏覽器的JavaScript實現 可以用 caller 這個屬性獲得(這不是 ECMAScript 規(guī)范的一部分,所有還是慎用)。 從以下的代碼能夠很好的理解這點:
復制代碼 代碼如下:
function a(){
alert('fun a caller=' + a.caller);
}
function b(){
a();
}
a();
b();

-----------
運行結果可以看到兩個對話框:
1.
fun a caller=null;
2.
fun a caller=function b(){
a();
}
--------------------------
而對于所有者,則是指調用函數的對象(一個動態(tài)的概念), 在函數體中的this就是指向了函數的所有者。在這里的this 與 Java 以及 C++ 中的 this指針是完全不同的兩個概念,很多人忽略了這一點,這也是導致 JavaScript中的this無法很好理解的原因之一??纯匆韵碌睦樱?
復制代碼 代碼如下:
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");

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

下面是一些參考文檔
Javascript this用法小結
http://www.jb51.NET/article/16863.htm

JavaScript this 深入理解
http://www.jb51.NET/article/19425.htm

JavaSCRIPT THIS詳解 面向對象
http://www.jb51.NET/article/17584.htm

Javascript this指針
http://www.jb51.NET/article/19434.htm

JavaScript中this關鍵字使用方法詳解
http://www.jb51.NET/article/7954.htm

Javascript this關鍵字使用分析
http://www.jb51.NET/article/16235.htm

JavaScript技術JavaScript this 深入理解,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 91九色视频在线观看 | 在线观看免费毛片 | 空姐内射出白浆10p 空姐厕所啪啪啪 | 韩国伦理片2018在线播放免费观看 | 青青久在线 | 野草在线视频完整视频 | 亚洲精品天堂无码中文字幕影院 | 亚洲欧洲日韩天堂无吗 | 欧美性色生活片天天看99顶级 | 亚洲中久无码永久在线 | 免费观看成人www精品视频在线 | 久久亚洲AV成人无码动态图 | 色99久久久久高潮综合影院 | 护士一级片| 绝色娇嫩美人妻老师 | 尤物yw193can入口 | 国产免费人视频在线观看免费 | 稚嫩挤奶h调教h | 草神被爆漫画羞羞漫画 | 久久免费看视频 | 国产精品亚洲欧美 | 一攻多受h嗯啊巨肉bl巨污 | 洗濯屋H纯肉动漫在线观看 羲义嫁密着中出交尾gvg794 | 草莓视频免费看 | 与子敌伦刺激对白亂輪亂性 | 日本激情在线 | 亚洲国产第一 | 免费观看亚洲视频 | 亚洲精品久久久久久蜜臀 | 亚洲 自拍 欧洲 视频二区 | 囯产精品麻豆巨作久久 | 胸大的姑娘中文字幕视频 | 女人爽到高潮嗷嗷叫视频 | 中国老太60old mantv | 国语自产二区高清国语自产拍 | 色婷婷99综合久久久精品 | 亚洲h视频在线观看 | 欧美性黑吊xxx | 99精品免费久久久久久久久日本 | 最近日本MV字幕免费观看在线 | 久久久久婷婷国产综合青草 |