国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

改變javascript函數內部this指針指向的三種方法

2024-05-06 14:10:22
字體:
來源:轉載
供稿:網友
在查了大量的資料后,我總結了下面的三條規則,這三條規則,已經可以解決目前我所遇到的所有問題.
規則0:函數本身是一個特殊類型,大多數時候,可以認為是一個變量。
代碼如下:
function a()
{
alert(this);
}

或者
var a = function()
{
alert(this);
}

都可以認為是創建了一個變量,這個變量的值就是一個函數。

規則1:如果一個函數,是某個對象的key 值,那么,this就指向這個對象。
這個規則很好理解:

代碼如下:
var a = function(obj)
{
alert(this == obj);
}

var o = {};
o.afun = a;
o.afun(o); //true


函數就是一個變量,但是可以綁定到某個對象的下面,并且 this 就會指向 o 對象。
這里必須要注意,沒有被綁定的對象,默認this 指向window 對象。
舉幾個例子:
代碼如下:
function a()
{
//this == window
}

function a()
{
//this == window
function b()
{
//this == window
}
}

還必須注意的是,綁定沒有傳遞性,比如上面的嵌套的函數,a綁定到 o 對象,那么就影響了a函數,
而b 還是指向到window。

規則2:如果函數new 了一下,那么就會創建一個對象,并且this 指向 新創建的對象。


var o = new a();
這個時候,o 不再是個函數,而實際上,可以認為是這樣的一個過程。
創建一個對象 var o = {};
然后,把this 指向 o,通過this 把 o 給初始化了。

規則3:通過apply 可以改變this 的指向

這個apply 的綁定就更加的靈活了,實際上,apply的功能和下面的功能差不多。
代碼如下:
var a = function (obj)
{
alert(this == obj);
};
obj.fun = a;
obj.fun(obj);//true

簡單的,可以a.apply(obj, [obj]); // true

javascript 的this 可以簡單的認為是 后期綁定,沒有地方綁定的時候,默認綁定window。

綜合實例:
jquery 里面有一個很常用的函數 each,可以把循環的對象元素綁定到this,方便操作。
這里只是簡單的做個演示:

代碼
代碼如下:
function each(tagName, callback)
{
var lists = document.getElementsByTagName(tagName);
for (var i = 0; i < lists.length; i++)
{
callback.apply(lists[i]);
}
}
each("a",
function ()
{
this.style.color = "red";
}
);

可以看到我頭部導航的鏈接都變成紅色了。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 德格县| 蕉岭县| 郓城县| 白玉县| 常熟市| 长治县| 彭山县| 且末县| 漯河市| 辽中县| 高台县| 谢通门县| 普安县| 陵川县| 道孚县| 桐乡市| 华阴市| 虞城县| 巩义市| 十堰市| 长岛县| 芮城县| 海宁市| 梁山县| 蒲江县| 万山特区| 永靖县| 班玛县| 噶尔县| 丰都县| 湖南省| 巴彦县| 南投县| 湘潭县| 北京市| 淄博市| 犍为县| 遵化市| 太湖县| 余姚市| 龙江县|