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

JavaScript 嵌套函數(shù)指向this對象錯誤的解決方法

 更新時間:2010年03月15日 11:16:32   作者:  
JavaScript對于全局函數(shù)內(nèi)的this綁定為全局對象,而對于嵌套函數(shù)也采用了相同的解釋。
先看一段嵌套了兩層function的JavaScript代碼:
復制代碼 代碼如下:

var me = {
name : 'Jimbor',
blog : 'http://jmedia.cn/',
sayMyName : function(){
var pre = 'My name is: ';
function displayName(){
alert(pre + this.name);
}
displayName();
}
}
me.sayMyName();

從代碼上看,我們希望通過sayMyName()的調(diào)用來顯示me的name屬性,即:My name is: Jimbor。但瀏覽器的執(zhí)行結(jié)果是:
復制代碼 代碼如下:

My name is:

是什么原因使name屬性沒有正確顯示呢?原來JavaScript對于全局函數(shù)內(nèi)的this綁定為全局對象,而對于嵌套函數(shù)也采用了相同的解釋。這個錯誤產(chǎn)生的后果是不能輕易使用嵌套函數(shù)來完成某些特殊的任務,因為這些函數(shù)對this所指向的對象解釋不同。
當然對于這個例子,我們完全可以不用嵌套的函數(shù)來完成相應的功能。但是對于某些應用可能會需要這種結(jié)構(gòu)。幸運的是,我們還是有辦法來糾正這個錯誤的。
方法一:用apply()函數(shù)
復制代碼 代碼如下:

apply(this_obj, params_array)

apply()函數(shù)可以在調(diào)用某個函數(shù)時重寫this所指向的對象,它接受兩個參數(shù),第一個this_obj即想要重寫this所指向的對象,params_array則是用來傳遞給調(diào)用函數(shù)的參數(shù)數(shù)組。我們把原來的代碼改寫為:
復制代碼 代碼如下:

var me = {
name : 'Jimbor',
blog : 'http://jmedia.cn/',
sayMyName : function(){
var pre = 'My name is: ';
function displayName(){
alert(pre + this.name);
}
displayName.apply(me);
}
}
me.sayMyName();

再看瀏覽器執(zhí)行結(jié)果:
My name is: Jimbor
類似的函數(shù)還有call()。區(qū)別是call()傳參的方式是一個接一個而不是打包成一個數(shù)組。
方法二:用that替換this
即我們可以在最外層的函數(shù)定義一個變量來指向this所指向的對象,一旦內(nèi)部的函數(shù)需要調(diào)用this時,我們就用這個定義的變量。通常根據(jù)習慣,會將這個變量命名為that。那么原來的代碼可以改成這樣:
復制代碼 代碼如下:

var me = {
name : 'Jimbor',
blog : 'http://jmedia.cn/',
sayMyName : function(){
var pre = 'My name is: ';
var that = this;
function displayName(){
alert(pre + that.name);
}
displayName();
}
}
me.sayMyName();

很好用,不是嗎?因為不會涉及到具體的對象指定,所以更推薦第二種方法。

相關(guān)文章

  • toString.call()通用的判斷數(shù)據(jù)類型方法示例

    toString.call()通用的判斷數(shù)據(jù)類型方法示例

    這篇文章主要給大家介紹了關(guān)于toString.call()通用的判斷數(shù)據(jù)類型方法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08
  • xmlplus組件設(shè)計系列之分隔框(DividedBox)(8)

    xmlplus組件設(shè)計系列之分隔框(DividedBox)(8)

    xmlplus 是一個JavaScript框架,用于快速開發(fā)前后端項目。這篇文章主要介紹了xmlplus布局類組件之分隔框,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-05-05
  • js精度溢出解決方案

    js精度溢出解決方案

    一般參數(shù)值不能超過16位。如果超出16都是用0替代,導致我們查詢不到自己想要的結(jié)果,本文將介紹如何處理這種現(xiàn)象
    2012-12-12
  • 如何使用瀏覽器擴展篡改網(wǎng)頁中的JS?文件

    如何使用瀏覽器擴展篡改網(wǎng)頁中的JS?文件

    這篇文章主要為大家介紹了如何使用瀏覽器擴展篡改網(wǎng)頁中的JS文件實現(xiàn)解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • js遍歷詳解(forEach, map, for, for...in, for...of)

    js遍歷詳解(forEach, map, for, for...in, for...of)

    在本篇文章里小編給大家整理的是關(guān)于js中的各種遍歷(forEach, map, for, for...in, for...of)相關(guān)知識點用法總結(jié),需要的朋友們參考下。
    2019-08-08
  • 異步安全加載javascript文件的方法

    異步安全加載javascript文件的方法

    這篇文章主要介紹了異步安全加載javascript文件的方法,實例分析了javascript實現(xiàn)文件異步加載的具體技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-07-07
  • 前端設(shè)計師們最常用的JS代碼匯總

    前端設(shè)計師們最常用的JS代碼匯總

    本文給大家整理匯總了一些做前端經(jīng)常需要用的到JavaScript代碼片段,非常的全面,有需要的小伙伴可以參考下
    2016-09-09
  • JS實現(xiàn)仿QQ面板的手風琴效果折疊菜單代碼

    JS實現(xiàn)仿QQ面板的手風琴效果折疊菜單代碼

    這篇文章主要介紹了JS實現(xiàn)仿QQ面板的手風琴效果折疊菜單代碼,涉及JavaScript基于鼠標事件動態(tài)操作頁面元素樣式的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • 微信小程序獲取用戶手機號碼的詳細步驟

    微信小程序獲取用戶手機號碼的詳細步驟

    最近改了一個公司項目,新增加了一個獲取用戶手機號功能,里面用到了關(guān)于獲取用戶信息和用戶手機號的功能,下面這篇文章主要給大家介紹了關(guān)于微信小程序獲取用戶手機號碼的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • 學習JS中的DOM節(jié)點以及操作

    學習JS中的DOM節(jié)點以及操作

    本篇文章給大家整理了關(guān)于JS中DOM節(jié)點的相關(guān)知識點以及代碼實例,有興趣的朋友可以跟著學習下。
    2018-04-04

最新評論

富宁县| 云林县| 天台县| 扶风县| 托克托县| 江油市| 墨玉县| 慈利县| 文山县| 陇南市| 河南省| 民乐县| 晋宁县| 东丽区| 应用必备| 原平市| 馆陶县| 区。| 甘孜县| 田阳县| 旬邑县| 贵港市| 什邡市| 宜城市| 台江县| 景泰县| 阜平县| 祁连县| 渑池县| 分宜县| 大化| 南开区| 林甸县| 景洪市| 龙南县| 门头沟区| 谢通门县| 柘城县| 古蔺县| 松阳县| 盈江县|