精品伊人久久大香线蕉,开心久久婷婷综合中文字幕,杏田冲梨,人妻无码aⅴ不卡中文字幕

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
js中this

JavaScript中this的使用

在JavaScript中this變量是一個令人難以摸清的關鍵字,this可謂是非常強大,充分了解this的相關知識有助于我們在編寫面向對象的JavaScript程序時能夠游刃有余。

對于this變量最要的是能夠理清this所引用的對象到底是哪一個,也許很多資料上都有自己的解釋,但有些概念講的偏繁雜。而我的理解是:首先分析this所在的函數是當做哪個對象的方法調用的,則該對象就是this所引用的對象

 

示例一、

var obj = {};

obj.x = 100;

obj.y = function(){ alert( this.x ); };

obj.y();    //彈出 100

 

這段代碼非常容易理解,當執行 obj.y() 時,函數是作為對象obj的方法調用的,因此函數體內的this指向的是obj對象,所以會彈出100。

 

示例二、

var checkThis = function(){

    alert( this.x); 

};

var x = 'this is a property of window';

var obj = {};

obj.x = 100;

obj.y = function(){ alert( this.x ); };

obj.y();    //彈出 100

checkThis();    //彈出 'this is a property of window'

這里為什么會彈出 'this is a property of window',可能有些讓人迷惑。在JavaScript的變量作用域里有一條規則“全局變量都是window對象的屬性”。當執行 checkThis() 時相當于 window.checkThis(),因此,此時checkThis函數體內的this關鍵字的指向變成了window對象,而又因為window對象又一個x屬性('this is a property of window'),所以會彈出 'this is a property of window'。

 

上面的兩個示例都是比較容易理解的,因為只要判斷出當前函數是作為哪個對象的方法調用(被哪個對象調用)的,就可以很容易的判斷出當前this變量的指向。

 

this.x 與 apply()、call()

通過call和apply可以重新定義函數的執行環境,即this的指向,這對于一些應用當中是十分常用的。

示例三:call()

 

function changeStyle( type , value ){

    this.style[ type ] = value;

}

var one = document.getElementByIdx( 'one' ); 

changeStyle.call( one , 'fontSize' , '100px' );

changeStyle('fontSize' , '300px');  //出現錯誤,因為此時changeStyle中this引用的是window對象,而window并無style屬性。

注意changeStyle.call()中有三個參數,第一個參數用于指定該函數將被哪個對象所調用。這里指定了one,也就意味著,changeStyle函數將被one調用,因此函數體內this指向是one對象。而第二個和第三個參數對應的是changeStyle函數里的type和value兩個形參。最總我們看到的效果是Dom元素one的字體變成了20px。

示例四:apply()

 

 

function changeStyle( type , value ){

    this.style[ type ] = value;

}

var one = document.getElementByIdx( 'one' ); 

changeStyle.apply( one , ['fontSize' , '100px' ]);

changeStyle('fontSize' , '300px');  //出現錯誤,原因同示例三

 

apply的用法和call大致相同,只有一點區別,apply只接受兩個參數,第一個參數和call相同,第二個參數必須是一個數組,數組中的元素對應的就是函數的形參。

 

無意義(詭異)的this用處

示例五:

var obj = {

    x : 100,

    y : function(){

        setTimeout(

            function(){ alert(this.x); }    //這里的this指向的是window對象,并不是我們期待的obj,所以會彈出undefined

         , 2000);

    }

};

obj.y();

如何達到預期的效果

var obj = {

    x : 100,

    y : function(){

        var that = this;

        setTimeout(

            function(){ alert(that.x); }

         , 2000);

    }

};

obj.y();    //彈出100

 

事件監聽函數中的this

var one = document.getElementByIdx( 'one' );

one.onclick = function(){

    alert( this.innerHTML );    //this指向的是one元素,這點十分簡單..

};

 

注意:js中的全局變量都會動態添加到Window 的實例 window,作為其屬性。

來源:百度文庫

本站僅提供存儲服務,所有內容均由用戶發布,如發現有害或侵權內容,請點擊舉報
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
高級JScript
在JavaScript中使用面向對象
詳解prototype與
JavaScript語言精髓與編程實踐20071115 筆記5 第七章一般性的動態函數式語言技巧
一篇文章帶你了解JavaScript this關鍵字
【經驗交流】matlab自定義回調函數語法規則
更多類似文章 >>
生活服務
分享 收藏 導長圖 關注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點擊這里聯系客服!

聯系客服

主站蜘蛛池模板: 鹤峰县| 新丰县| 泰宁县| 巴塘县| 仁怀市| 民权县| 昌黎县| 醴陵市| 涞源县| 福海县| 怀柔区| 古蔺县| 汉沽区| 焦作市| 赫章县| 辽中县| 长顺县| 武安市| 林西县| 莱芜市| 吴堡县| 教育| 惠安县| 黎川县| 仁布县| 柏乡县| 五莲县| 中方县| 楚雄市| 屯门区| 扎兰屯市| 中牟县| 盐边县| 西昌市| 应城市| 桑植县| 岳池县| 澄江县| 六枝特区| 海口市| 湛江市|