javascript當中的程式碼嗅探擴充原生物件和原型(prototype)_javascript技巧
註:翻譯之中有什麼不恰當的地方,歡迎大家指正,祝大家雙節快樂!
如果不是有特殊需求而去擴充原生物件和原型(prototype)的做法是不好的
//不要這樣做
Array.prototype.map = function() {
// 一些程式碼
};
除非這樣做是值得的,例如,向一些舊的瀏覽器中添加一些ECMAScript5中的方法。
在這種情況下,我們一般會這樣做:
if (!Array.prototype.map) {
Array.prototype.map = function() {
//一些代碼
};
}
如果我們比較偏執,為了防止別人將map定義為其它意想不到的值,像true或其他,我們可以將檢測代碼改為下面這樣:
if (typeof Array.prototype.map !== "function") {
Array.prototype.map = function() {
// 一些程式碼
};
}
(儘管這將破壞其它開發者的map定義,並影響他們功能的實現)
但是,在在一個充滿敵意和殘酷競爭的環境下(換句話說,但你提供或使用一個js庫時),你不應該相信任何人。如果其他人的js程式碼先於你的js程式碼加載,並且以某種方式定義了一個不完全相容ES5的map()方法,導致你的程式碼不能正常運行,該怎麼辦呢?
不過,你可以相信瀏覽器,如果Webkit核心實作了map()方法,你可以放心,這個方法一定會正常運作。否則的話,你就要用你的程式碼來偵測了。
幸運的是,這在JavaScript當中很容易實現,當你呼叫原生函數的toString方法的時候,會傳回一個函數的字串,該函數的函數體是[native code]。
例如在Chrome的控制台下:
程式碼如下:
Array.prototype.map.toString();
"function map() { [native code] }" 複製程式碼
程式碼如下:
Array.prototype.map.toString() .replace(/s/g, '*');
// " function*map()*{*****[native*code]*}" // FF
// "function*map()*{*[native*code]*}" // Chrome 複製程式碼
複製程式碼
程式碼如下:
複製程式碼
程式碼如下:
function shim(o, prop, fn >var nbody = "function" prop "(){[nativecode]}";
if (o.hasOwnProperty(prop) &&
o[prop].toString().replace(/s/g, ' ') === nbody) {
return true;
}
//這是原生的方法
shim(
Array.prototype, 'map',
function(){/*...*/}
); / / true
//這是新加入的方法
shim(
Array.prototype, 'mapzer',
function(){alert(this)}
);
[ 1,2,3].mapzer(); // alerts 1,2,3
(完)^_^

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

原神4.4版新地圖介紹,小夥伴們原神這次4.4版本也是迎來了璃月的海燈節,同時將在4.4版本推出一個新的地圖區域,名為沉玉谷。根據提供的信息,沉玉谷實際上是翹英莊的一部分,但玩家更習慣稱其為沉玉谷。下面就讓小編來跟大家介紹一下新地圖吧。原神4.4版新地圖介紹4.4版本將開放璃月北部的「沉玉谷·上谷」、「沉玉谷·南陵」和「來歆山」,在「沉玉谷·上谷」已為旅行者開啟傳送錨點。 ※完成魔神任務序章·第三幕龍與自由之歌」後,將自動解鎖該傳送錨點。二、翹英莊當春日溫煦的柔風再度撫過沉玉的山野,那馥鬱的

原型,js中的一個對象,用於定義其他對象的屬性和方法,每個構造函數都有一個prototype屬性,這個屬性是一個指針,指向一個原型對象,當創建新對象時,這個新對象會從其建構子的prototype屬性繼承屬性與方法。原型鏈,當試圖存取物件的屬性時,js會先檢查這個物件是否有這個屬性,如果沒有,那麼js就會轉向這個物件的原型,如果原型物件也沒有這個屬性,會繼續尋找原型的原型。

原型和原型鏈的區別是:1、原型是每個物件都具有的屬性,包含了一些共享的屬性和方法,用於實現物件之間的屬性和方法的共享和繼承,而原型鍊是一種透過物件之間的原型關係來實現繼承的機制,定義了物件之間的繼承關係,使得物件可以共享原型物件的屬性和方法;2、原型的作用是定義物件的共享屬性和方法,使得多個物件可以共享同一個原型物件的屬性和方法,而原型鏈的作用是實現物件之間的繼承關係等等。

Go語言和Python是兩種非常流行的程式語言,都具有各自的優勢和特點。在高性能程式設計方面,兩者也有一些不同之處。本文將對Go語言和Python進行比較,以探討哪個更適用於高效能程式設計。首先,讓我們來了解一下Go語言。 Go語言是由谷歌公司開發的開源程式語言,它專注於簡潔、高效和並發性。 Go語言的設計目標之一是提供高效能的程式設計體驗。它具備輕量級的協程(goro

在過去一年中,隨著大模型技術的廣泛應用,我們已經見證了AI如何深刻地改變我們的工作方式。在程式編寫領域,AI的介入同樣將為程式設計師帶來前所未有的便利。近日,非十科技推出了一款基於自研代碼大模型打造的AI代碼助手——FittenCode,它可以幫助程式設計師更迅捷、更準確、更高品質地完成編碼任務,大幅提升編碼效率,並且向用戶免費開放使用!產品官網地址:https://code.fittentech.com/FittenCode自上次發布以來迅速走紅。開發團隊日以繼夜地工作,帶來了功能、

在當今科技進步迅猛的時代,程式語言的選擇變得非常關鍵。隨著軟體開發領域的不斷發展,Go語言和Python成為了兩個備受關注的程式語言。本文將對Go語言和Python進行比較分析,以幫助讀者根據專案需求選擇合適的程式語言。首先,讓我們來了解一下Go語言。 Go語言是由Google公司開發的靜態編譯型程式語言。它具有強大的並發處理能力和高效的垃圾回收機制,非常

深入剖析:原型和原型鏈在物件導向程式設計中的角色,需要具體程式碼範例在物件導向程式設計(OOP)中,原型(Prototype)和原型鏈(PrototypeChain)是重要的概念。它們提供了一種基於物件的程式碼復用機制,並且在Javascript等語言中扮演關鍵的角色。在本文中,我們將深入剖析原型和原型鏈的概念,探討它們在OOP中的作用,並透過具體的程式碼範例進行說明

原型和原型鏈的獨特之處探究在JavaScript中,原型(prototype)和原型鏈(prototypechain)是非常重要的概念。理解原型和原型鏈的獨特之處可以幫助我們更好地理解JavaScript中的繼承和物件創建。原型是JavaScript中每個物件都擁有的屬性,它指向一個其他對象,用於共享屬性和方法。每個JavaScript物件都有一個原型
