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

javascript當(dāng)中的代碼嗅探擴(kuò)展原生對(duì)象和原型(prototype)

 更新時(shí)間:2013年01月11日 09:37:27   投稿:whsnow  
如果不是有特殊需要而去擴(kuò)展原生對(duì)象和原型(prototype)的做法是不好的,除非這樣做是值得的,例如,向一些舊的瀏覽器中添加一些ECMAScript5中的方法

:翻譯之中有什么不恰當(dāng)?shù)牡胤剑瑲g迎大家指正,祝大家雙節(jié)快樂(lè)!
如果不是有特殊需要而去擴(kuò)展原生對(duì)象和原型(prototype)的做法是不好的

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

//不要這樣做
Array.prototype.map = function() {
// 一些代碼
};

除非這樣做是值得的,例如,向一些舊的瀏覽器中添加一些ECMAScript5中的方法。
在這種情況下,我們一般這樣做:
復(fù)制代碼 代碼如下:

if (!Array.prototype.map) {
Array.prototype.map = function() {
//一些代碼
};
}

如果我們比較偏執(zhí),為了防止別人將map定義為其它意想不到的值,像true或其他,我們可以 將檢測(cè)代碼改為下面這樣:
復(fù)制代碼 代碼如下:

if (typeof Array.prototype.map !== "function") {
Array.prototype.map = function() {
// 一些代碼
};
}

但是,在一個(gè)充滿敵意和殘酷競(jìng)爭(zhēng)的環(huán)境下(換句話說(shuō),但你提供或者使用一個(gè)js庫(kù)時(shí)),你不應(yīng)該相信任何人。如果其他人的js代碼先于你的js代碼加載,并且以某種方式定義了一個(gè)不完全兼容ES5的map()方法,導(dǎo)致你的代碼不能正常運(yùn)行,該怎么辦呢?

不過(guò),你可以相信瀏覽器,如果Webkit內(nèi)核實(shí)現(xiàn)了map()方法,你可以放心,這個(gè)方法肯定會(huì)正常運(yùn)行。否則的話,你就要用你的代碼進(jìn)行檢測(cè)了。

幸運(yùn)的是,這在JavaScript當(dāng)中很容易實(shí)現(xiàn),當(dāng)你調(diào)用原生函數(shù)的toString方法的時(shí)候,會(huì)返回一個(gè)函數(shù)的字符串,該函數(shù)的函數(shù)體是[native code]。
例如在Chrome的控制臺(tái)下:

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

> Array.prototype.map.toString();
"function map() { [native code] }"

一個(gè)適當(dāng)?shù)拇a檢查向來(lái)就是一個(gè)稍微令人不快的事,因?yàn)椴煌瑸g覽器對(duì)空格和換行處理的太過(guò)輕率。測(cè)試如下:
復(fù)制代碼 代碼如下:

Array.prototype.map.toString().replace(/\s/g, '*');
// "*function*map()*{*****[native*code]*}*" // IE
// "function*map()*{*****[native*code]*}" // FF
// "function*map()*{*[native*code]*}" // Chrome

只簡(jiǎn)單的去掉\s會(huì)得到更實(shí)用的字符串:
復(fù)制代碼 代碼如下:

Array.prototype.map.toString().replace(/\s/g, '');
// "functionmap(){[nativecode]}"

你可以將它封裝成一個(gè)可以重用的shim()函數(shù),這樣以來(lái)你就沒(méi)有必要去重復(fù)所有的類(lèi)似!

Array.prototype...這樣的操作了。這個(gè)函數(shù)會(huì)接受一個(gè)對(duì)象作為參數(shù)(例如,Array.prototype),一個(gè)將要添加的屬性(例如 'map')和一個(gè)要添加的函數(shù)。
復(fù)制代碼 代碼如下:

function shim(o, prop, fn) {
var nbody = "function" + prop + "(){[nativecode]}";
if (o.hasOwnProperty(prop) &&
o[prop].toString().replace(/\s/g, '') === nbody) {
//表名是原生的!
return true;
}
//新添加的
o[prop] = fn;
}

測(cè)試:
復(fù)制代碼 代碼如下:

//這是原生的方法
shim(
Array.prototype, 'map',
function(){/*...*/}
); // true
//這是新添加的方法
shim(
Array.prototype, 'mapzer',
function(){alert(this)}
);
[1,2,3].mapzer(); // alerts 1,2,3

(完)^_^

相關(guān)文章

  • HTML頁(yè)面滾動(dòng)時(shí)獲取離頁(yè)面頂部的距離2種實(shí)現(xiàn)方法

    HTML頁(yè)面滾動(dòng)時(shí)獲取離頁(yè)面頂部的距離2種實(shí)現(xiàn)方法

    獲取離滾動(dòng)頁(yè)面的頂部距離有兩種方法一是DOM;而是jquery,具體的實(shí)現(xiàn)如下,感興趣的朋友可以嘗試操作下
    2013-09-09
  • javascript new 需不需要繼續(xù)使用

    javascript new 需不需要繼續(xù)使用

    在javascript你不需要使用new Object(),你該使用{}就可以了。
    2009-07-07
  • php中給js數(shù)組賦值方法

    php中給js數(shù)組賦值方法

    PHP函數(shù)庫(kù)提供了編/解碼JSON的函數(shù):json_encode()和json_decode(),可以比較方便的傳遞數(shù)組或?qū)ο蠼ojavascript
    2014-03-03
  • 用html+css+js實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的圖片切換特效

    用html+css+js實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的圖片切換特效

    這篇文章主要介紹了用html+css+js實(shí)現(xiàn)的一個(gè)簡(jiǎn)單的圖片切換特效,需要的朋友可以參考下
    2014-05-05
  • js實(shí)現(xiàn)彈窗效果

    js實(shí)現(xiàn)彈窗效果

    這篇文章主要為大家詳細(xì)介紹了js實(shí)現(xiàn)彈窗效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-08-08
  • js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法

    js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法

    這篇文章主要介紹了js與jQuery實(shí)現(xiàn)checkbox復(fù)選框全選/全不選的方法,結(jié)合實(shí)例較為詳細(xì)的分析了JavaScript與jQuery針對(duì)checkbox復(fù)選框全選與反選的操作技巧,需要的朋友可以參考下
    2016-01-01
  • echarts安裝與配置

    echarts安裝與配置

    這篇文章介紹了echarts安裝與配置的方法,對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-06-06
  • promise封裝wx.request的方法

    promise封裝wx.request的方法

    這篇文章主要介紹了promise封裝wx.request的方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-05-05
  • JS的replace方法

    JS的replace方法

    在javascript中,String的函數(shù)replace()簡(jiǎn)直太讓人喜愛(ài)了。它靈活而強(qiáng)大的字符替換處理能力,這里簡(jiǎn)單介紹下,方便需要的朋友
    2013-12-12
  • JavaScript設(shè)計(jì)模式之原型模式(Object.create與prototype)介紹

    JavaScript設(shè)計(jì)模式之原型模式(Object.create與prototype)介紹

    這篇文章主要介紹了JavaScript設(shè)計(jì)模式之原型模式(Object.create與prototype)介紹,原型模式指使用原型實(shí)例來(lái)拷貝、創(chuàng)建新的可定制的對(duì)象,新建的對(duì)象,不需要知道原對(duì)象創(chuàng)建的具體過(guò)程,需要的朋友可以參考下
    2014-12-12

最新評(píng)論

石棉县| 巨野县| 尖扎县| 嵩明县| 克东县| 石嘴山市| 安平县| 安新县| 定日县| 沾益县| 颍上县| 五原县| 嘉义县| 崇左市| 北安市| 辰溪县| 舟曲县| 崇仁县| 深泽县| 湘阴县| 航空| 海口市| 库车县| 东方市| 丰台区| 宁武县| 榆中县| 阿城市| 梁平县| 石河子市| 新干县| 西吉县| 三明市| 南澳县| 林西县| 诸城市| 钟山县| 修文县| 六盘水市| 沙雅县| 同仁县|