Rumah hujung hadapan web tutorial js javascript当中的代码嗅探扩展原生对象和原型(prototype)_javascript技巧

javascript当中的代码嗅探扩展原生对象和原型(prototype)_javascript技巧

May 16, 2016 pm 05:43 PM
prototaip

:翻译之中有什么不恰当的地方,欢迎大家指正,祝大家双节快乐!
如果不是有特殊需要而去扩展原生对象和原型(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]*}*" // IE
// "function*map()*{*****[native*code]*}" // FF
// "function*map()*{*[native*code]*}" // Chrome

只简单的去掉\s会得到更实用的字符串:
复制代码 代码如下:

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

你可以将它封装成一个可以重用的shim()函数,这样以来你就没有必要去重复所有的类似!

Array.prototype...这样的操作了。这个函数会接受一个对象作为参数(例如,Array.prototype),一个将要添加的属性(例如 'map')和一个要添加的函数。
复制代码 代码如下:

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;
}

测试:
复制代码 代码如下:

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

(完)^_^
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Genshin Impact Pengenalan kepada peta baharu dalam versi 4.4 Genshin Impact Pengenalan kepada peta baharu dalam versi 4.4 Jan 31, 2024 pm 06:36 PM

Memperkenalkan peta baharu Genshin Impact versi 4.4, Genshin Impact 4.4 versi turut menyambut Festival Tanglung Laut di Liyue Pada masa yang sama, kawasan peta baharu akan dilancarkan dalam versi 4.4 yang dipanggil Shen Yu Valley. Mengikut maklumat yang diberikan, Shen Yugu sebenarnya adalah sebahagian daripada Kampung Qiaoying, tetapi pemain lebih terbiasa memanggilnya Shen Yugu. Sekarang izinkan saya memperkenalkan peta baharu kepada anda. Pengenalan kepada peta baharu Genshin Impact versi 4.4.4 akan membuka "Lembah Chenyu·Shanggu", "Lembah Chenyu·Nanling" dan "Gunung Laixin" di utara Liyue. Titik utama Teleportasi telah dibuka untuk pelancong di "Chenyu Lembah·Shanggu" . ※Selepas melengkapkan prolog Demon God Quest·Act 3: The Dragon and the Song of Freedom, titik sauh teleportasi akan dibuka secara automatik. 2. Qiaoyingzhuang Apabila angin musim bunga yang hangat sekali lagi membelai pergunungan dan padang Chenyu, harumnya

Apakah prototaip dan rantai prototaip Apakah prototaip dan rantai prototaip Nov 09, 2023 pm 05:59 PM

Prototaip, objek dalam js, digunakan untuk menentukan sifat dan kaedah objek lain. Setiap pembina mempunyai atribut prototaip atribut prototaip pembinanya mewarisi sifat dan kaedah. Rantaian prototaip, apabila cuba mengakses sifat objek, js akan menyemak sama ada objek mempunyai sifat ini Jika tidak, maka js akan beralih kepada prototaip objek Jika objek prototaip tidak mempunyai sifat ini terus mencari prototaip prototaip.

Perbandingan prestasi bahasa Go dan Python: Mana satu yang lebih sesuai untuk pengaturcaraan berprestasi tinggi? Perbandingan prestasi bahasa Go dan Python: Mana satu yang lebih sesuai untuk pengaturcaraan berprestasi tinggi? Jan 30, 2024 am 08:13 AM

Bahasa Go dan Python adalah dua bahasa pengaturcaraan yang sangat popular, kedua-duanya mempunyai kelebihan dan ciri tersendiri. Terdapat juga beberapa perbezaan antara kedua-duanya apabila ia berkaitan dengan pengaturcaraan berprestasi tinggi. Artikel ini akan membandingkan bahasa Go dan Python untuk meneroka yang mana satu lebih sesuai untuk pengaturcaraan berprestasi tinggi. Mula-mula, mari kita fahami bahasa Go. Go ialah bahasa pengaturcaraan sumber terbuka yang dibangunkan oleh Google yang memfokuskan pada kesederhanaan, kecekapan dan keselarasan. Salah satu matlamat reka bentuk bahasa Go adalah untuk menyediakan pengalaman pengaturcaraan berprestasi tinggi. Ia mempunyai coroutine ringan (goro

Apakah perbezaan antara rantai prototaip dan prototaip Apakah perbezaan antara rantai prototaip dan prototaip Nov 09, 2023 pm 04:48 PM

Perbezaan antara rantaian prototaip dan prototaip ialah: 1. Prototaip ialah atribut yang dimiliki oleh setiap objek, termasuk beberapa atribut dan kaedah yang dikongsi, yang digunakan untuk merealisasikan perkongsian dan pewarisan atribut dan kaedah antara objek, manakala rantaian prototaip ialah pewarisan. mekanisme dilaksanakan melalui hubungan prototaip antara objek, yang mentakrifkan hubungan warisan antara objek supaya objek boleh berkongsi sifat dan kaedah objek prototaip 2. Fungsi prototaip adalah untuk menentukan sifat dan kaedah yang dikongsi objek, supaya berbilang Objek boleh berkongsi sifat dan kaedah objek prototaip yang sama, dan fungsi rantai prototaip adalah untuk merealisasikan hubungan warisan antara objek, dsb.

Pilih bahasa pengaturcaraan yang betul: Bandingkan Go dan Python untuk menentukan pilihan terbaik untuk keperluan projek anda Pilih bahasa pengaturcaraan yang betul: Bandingkan Go dan Python untuk menentukan pilihan terbaik untuk keperluan projek anda Jan 30, 2024 am 08:00 AM

Dalam era kemajuan teknologi yang pesat hari ini, pilihan bahasa pengaturcaraan telah menjadi sangat kritikal. Dengan pembangunan berterusan bidang pembangunan perisian, bahasa Go dan Python telah menjadi dua bahasa pengaturcaraan yang telah menarik banyak perhatian. Artikel ini akan menjalankan analisis perbandingan bahasa Go dan Python untuk membantu pembaca memilih bahasa pengaturcaraan yang sesuai mengikut keperluan projek. Mula-mula, mari kita fahami bahasa Go. Bahasa Go ialah bahasa pengaturcaraan yang disusun secara statik yang dibangunkan oleh Google. Ia mempunyai keupayaan pemprosesan serentak yang kuat dan mekanisme pengumpulan sampah yang cekap, yang sangat

Alat pengaturcaraan percuma domestik ini popular! Dibangunkan oleh pasukan PhD dari Universiti Tsinghua, ia mempunyai kelewatan tindak balas yang singkat dan ketepatan yang tinggi. Alat pengaturcaraan percuma domestik ini popular! Dibangunkan oleh pasukan PhD dari Universiti Tsinghua, ia mempunyai kelewatan tindak balas yang singkat dan ketepatan yang tinggi. Jan 31, 2024 pm 05:03 PM

Pada tahun lalu, dengan aplikasi meluas teknologi model besar, kami telah menyaksikan bagaimana AI telah mengubah secara mendalam cara kami bekerja. Dalam bidang pengaturcaraan, campur tangan AI juga akan membawa kemudahan yang tidak pernah berlaku sebelum ini kepada pengaturcara. Baru-baru ini, Feishen Technology melancarkan FittenCode, pembantu kod AI berdasarkan model kod yang dibangunkan sendiri yang besar. Ia boleh membantu pengaturcara menyelesaikan tugas pengekodan dengan lebih cepat, tepat dan dengan kualiti yang lebih tinggi, meningkatkan kecekapan pengekodan dan menyumbang kepada Percuma dan terbuka kepada. pengguna! Alamat tapak web rasmi produk: https://code.fittentech.com/FittenCode telah menjadi popular dengan cepat sejak keluaran terakhirnya. Pasukan pembangunan bekerja sepanjang masa untuk membawa ciri,

Apakah fungsi prototaip js dan rantai prototaip Apakah fungsi prototaip js dan rantai prototaip Nov 09, 2023 pm 04:56 PM

Fungsi rantai prototaip dan prototaip js adalah untuk merealisasikan pewarisan objek, menjimatkan ruang memori, dan meningkatkan prestasi dan kebolehselenggaraan kod. Pengenalan terperinci: 1. Laksanakan pewarisan objek Prototaip dan rantaian prototaip membolehkan anda mencipta objek dan mewarisi sifat dan kaedah objek lain Apabila anda mencipta objek baharu, anda boleh mengarahkan prototaipnya ke objek lain, supaya objek baru Objek boleh mengakses sifat dan kaedah pada objek prototaip 2. Menjimatkan memori dan meningkatkan prestasi Dalam JavaScript, setiap objek mempunyai prototaip, objek boleh berkongsi prototaip dan sebagainya.

Apakah ciri-ciri prototaip dan rantai prototaip? Apakah ciri-ciri prototaip dan rantai prototaip? Nov 09, 2023 pm 04:38 PM

Ciri-ciri prototaip ialah: 1. Prototaip ialah objek biasa, yang boleh mempunyai sifat dan kaedah, sama seperti objek lain 2. Apabila objek dicipta, prototaip dikaitkan secara automatik. Apabila kita mencipta objek baharu, JavaScript secara automatik akan menetapkan prototaip kepada objek dan mengaitkannya dengan objek 3. Objek boleh mengakses sifat dan kaedah prototaip melalui rantaian prototaip ialah: 1 . Setiap Objek mempunyai prototaip Apabila mengakses harta objek, jika objek itu sendiri tidak mempunyai harta, ia akan dicari dalam objek prototaip dan sebagainya.

See all articles